C++中默认的整型是有符号int
类型,int
类型占4个字节共32位,其中最高位是符号位,如果最高位是1,则表示负数。1<<31
的结果是0x80000000
, 其中最高位为1,数值为负数,负数是按补码形式存储的,其对应的数值是取反码加1,即-(0x7FFFFFFF + 1)=-2147483648
1<<31的意思是向左位移31位,超出可以表示的数的范围
这种是人为规定,就好像,平常我们在负数的前面加一个符号一样,要想这个32位数能正常表示负数,那是不是说要有一个符号位?你可以把它规定到第1位为符号位也行,怎么规定都是可以的。当然把它定在最高位确实是最好的,也比较符合我们把符号写在数字前面的习惯。如果你希望得到无符号数,定义时加上unsigned就好了。表示的意义虽然不一样,但是实质存储的可能是相同的东西,就好像-1其实就是最大的无符号整数(相同位数来说),unsigned int(-1)就可以表示最大的那个无符号整数了。不明白的话,还是得先学习基础知识,一句两句说不清楚。
溢出了
C++中,int占用4字节,32比特,数据范围为-21474836482147483647[-2^312^31-1]。