这个不会那么深奥,我只说一些表象的使人疑惑的问题。
比如很多人认为,int基本数据类型占用4个字节,一个字节8个字位,所以一个int占用32位,最左边的1位是标志位,用来表示正负数,0表示正数,1表示负数,所以剩下的31位表示数字的大小,所以正数的最大值不应该是2^31吗?
这是我的疑惑,我相信也是很多人的疑惑,今天看c++ 看到了这个,所以本着追求极致的想法,去研究了一下,终于想明白了,原来是在个数和最大值直接产生了疑惑:
总结一句话:
2^31 是表示31位能产生的多少种变化,也就是能承载多少个数字,就拿一个两位数的正数举例,个位数字能填入的数字是0-9,十位数能填入的数字也是0-9,所以这个两位数能组成多少个数字?显然是10X10=100,100个数字,但是100 并不是最大数,而是100-1,因为0也算进去了,同理 2^31=2147483648,表示能表示多少个正数,也包括0,所以最大的数字应该0111 1111 1111 1111 1111 1111 1111 1111 =2147483647 ,其实用算数算也是这个数(20+21+……2^31)
参考链接 int 的取值