中易网

C语言里的int 为什么2的31次方还要减1

答案:5  悬赏:60  
解决时间 2021-01-11 20:53
  • 提问者网友:蓝琪梦莎
  • 2021-01-11 16:28
C语言里的int 为什么2的31次方还要减1
最佳答案
  • 二级知识专家网友:春色三分
  • 2021-01-11 17:57
int数据类型属于整型,一个int数据在内存中占有4个字节(32位),即其存储的是整数,1、2、3、4........其中也包括负数。表示数据的正负需要一位,首位是0表示正数,首位是1表示负数,那么就只剩下31位去真正表示数据了。
我们举个例子:
假设我们的int类型只有2位的二进制位,那么它能表示-1,0,1;别忘了,这可是两位二进制,理论上应该至少表示4个数,所以,为了能让内存充分利用起来,应当有-2,-1,0,1或者-1,0,1,2。但是,计算机科学家们显然是选择了-2,-1,0,1这种做法。
-2的二进制是11;
-1的二进制是10;
0的二进制是00;
1的二进制是01.
下面我们再来说说计算机中真正的int数据类型,按照上面的例子来类推,32位的int数据所能表示的数值当是负的2的31次方~2的31次方减1.
全部回答
  • 1楼网友:長槍戰八方
  • 2021-01-11 23:37
第一位符号位为0,0后面31个1即032位,一位是符号位,正数的话,除过第一位符号位,有31个“0”“1”选择空,就会有2的31次方个数,这些数的范围是(正0)~(2的31次方-1),正数部分很好理解。
负数部分按正数的想法来的话,取值范围应该是(负0)~(负的2的31次方-1)
这么看来好像没什么问题,但是(正0)(负0)重复了啊啊
怎么办的,(负0)是这样的1000000000000....(省略)
就是这个(负零),其实就是(2的31次方),我们把它当作(负的2的31次方),也就是它的负号被用作表示数字的实体了....
来自大连理工大学学渣的回答。
  • 2楼网友:归鹤鸣
  • 2021-01-11 22:00
是2的32次方减1吧!这个是unsigned int的极致;
  • 3楼网友:低音帝王
  • 2021-01-11 20:30
这是最大值,本来32位,去了一位负号位,31位。。。。。。。因为值是从0开始的。
~
~
  • 4楼网友:我住北渡口
  • 2021-01-11 19:21
比如过 char类型是8位的。按道理来说2的8次方为256。但在c语言中,是从0开始算的,也就是从0开始加,加256次。那么得出最高位为255.既2的8次方减1.同理,int的类型也是一样的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息