32 位 int 类型的存储范围是( )?
这题就是考补码那点事儿。拿到题别慌,先想32位里最高位是符号位,剩下31位全1才是最大正数,而0只占一种编码,所以负数能多一个,直接锁定下界是-2^31,上界是2^31-1,选C就对了。
最容易栽跟头的就是下界,很多人凭直觉觉得正负对称,死记-2147483647,结果把最小值少算了一。上界也有人记成2^31,忘了符号位不能用来表示数值。还有少数同学会把无符号整数的范围混进来,以为int能跑到2147483648,其实那得是unsigned int。记住,补码里0只有一个编码,多出来的那个名额给了最小负数,这就是为什么范围不是对称的。
这题考查的是有符号整数的补码表示范围,属于基础中的基础,但年年必考,命题人最爱在这里挖坑。
32位int在内存里就是32个0或1。最高位(第32位)是符号位:0代表正,1代表负。剩下31位是数值位。
关键点来了:在补码规则下,0只有一种编码(32个0)。因为0只占了一个名额,所以32位能表示的负数会比正数多一个。也就是说,最大正数是31位全1,最小负数是31位全1再加一个1(符号位),即-2^31。