【C语言】int类型整数取值范围的缘由
有符号整形int 32位:(可存储的空间)
最小值原码为 0000 0000 0000 0000 0000 0000 0000 0001 = 1
最大值原码为 0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647
其中,最高位为符号位,正数表示 0;负数表示 1;
-1的取值范围为:
最大值:
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码(+1):1111 1111 1111 1111 1111 1111 1111 1111
最小值:
原码:1111 1111 1111 1111 1111 1111 1111 1111
反码:1000 0000 0000 0000 0000 0000 0000 0000
补码(+1):1|1000 0000 0000 0000 0000 0000 0000 0001(最高位溢出,所以不取)
最小的负数取值为:-2147483647
在二进制中,
+0的原码:0000 0000 0000 0000 0000 0000 0000 0000
-0的原码:1000 0000 0000 0000 0000 0000 0000 0000
而0没有正负之分,因此,-0被存储在某位的空间中:-2147483648
因此,带符号位的int类型存储空间为 [-2147483648,2147483647]
无符号的情况下,32位的整型 unsigned int 取值范围为:
如图所示,无符号位的int类型存储空间为 [0,4294967295]
这便是数据类型的取值范围的由来。
以上。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!