C语言编码转换
计算机中数字是以补码存储的。关于原码、反码和补码的关系请参考 看C语言编码转换——–负数的二进制表示方法。
C语言中类型的最大值最小值
理解了上面的原理,我们可以得到在计算机当中
一个int类型(4个字节)的数字,当它在计算机当中表示为下面这串数字的时候,我们可以得到其实下面表示的是他的补码,要换算成我们人类能够理解的十进制相当于要做补码->反码->源码的转化。
11111111 11111111 11111111 11111111
补码转换成反码是:
11111111 11111111 11111111 11111110
反码转换成原码是:
10000000 00000000 00000000 00000000
对于原码,因为最高位是符号位,所以对于我们人类来说,11111111 11111111 11111111 11111111
表示的就是-1
。
有符号最大数为:01 。。。共31个1。。。1 = 2^31-1
有符号最小数为:10。。。共31个0。。。0 = -2^31 (从表面上看,就是原码-0,这也是为什么用补码来表示正数的原因)