longbangming 发表于 2020-5-31 13:23:22

c语言int取值范围

c语言中,int的取值范围是负的2的31次方(1000000....)~2的31次方(011111...)减1。
我纳闷的是,为什么说,因为有一个符号常量所以减1,但是为什么要减1,怎么算的。真的搞不懂

永恒的蓝色梦想 发表于 2020-5-31 13:25:58

因为 0 被放到正数范围了,所以正数范围就少了一个。

longbangming 发表于 2020-5-31 13:29:49

永恒的蓝色梦想 发表于 2020-5-31 13:25
因为 0 被放到正数范围了,所以正数范围就少了一个。

少了一个?啥意思

qiuyouzhi 发表于 2020-5-31 13:41:27

longbangming 发表于 2020-5-31 13:29
少了一个?啥意思

因为int的范围是256,正数范围是1-128,而负数范围要容下一个0,
所以会少一个。

BIYU 发表于 2020-5-31 13:47:04

这得分有符号(signed)和无符号(unsigned).

signed里有一个符号位,表示正数负数,它位于二进制数的最前面.

而一般我们直接int a是默认为有符号整型.

永恒的蓝色梦想 发表于 2020-5-31 13:49:24

qiuyouzhi 发表于 2020-5-31 13:41
因为int的范围是256,正数范围是1-128,而负数范围要容下一个0,
所以会少一个。

是正数范围要容下一个0

qiuyouzhi 发表于 2020-5-31 13:53:01

永恒的蓝色梦想 发表于 2020-5-31 13:49
是正数范围要容下一个0

噢,好的

lovelysea 发表于 2020-5-31 14:32:09

想象一下,如果让你用二进制的2bit表达数的范围,00、01、10、11,如果10、11表示的是-1、-2的话,00、01只能表示0、1了呀,范围就是-2~1
页: [1]
查看完整版本: c语言int取值范围