原码为第一位正负,第二位及以后为大小;
反码:正数的反码不变,负数的反码为第一位(符号位)不变其余取反;
补码:正数补码不变,负数补码为第一位(符号位)不变其余取反再加1,即为反码加一。
小例子: 假设比特16位,
其中第一位是符号0为正,1为负;
所以也就是最大为0111111111111111
然后此时大小为0+2+4+8+-------+2的14次方=2的15次方-1;
即为最大范围,最小为同理;
然而最小为-32768,最大为32767;经百度,知道有+0与-0。
+0的原码为0000,0000,0000,0000,-0的原码为1000,0000,0000,0000.
又因为-0的补码为0000,0000,0000,0000与+0的补码相同,重复,
经过百度:
“但是,我们知道,16位二进制数可以表示216个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,那么我们可以知道 ,他就是1000000000000000,因为任何一个原码都不可能在转成补码时变成1000000000000000。
所以,人为规定1000000000000000这个补码编码为-32768。 所以,补码系统中,范围是-32768~32767。”
所以,人为规定1000000000000000这个补码编码为-32768。 所以,补码系统中,范围是-32768~32767。”
“因此,实际上,二进制的最小数确实是1111111111111111,只不过二进制的补码的最小值它才是1000000000000000,而补码的1111111111111111是二进制值的-1。 ”
所以综上,正负的那个最值数并不相同
比如:int类型是4字节,存放二进制的32位,同理最高位存放符号,他能存放的最大数就是2的31次方减1,也就是2147483647,而表面上最小的也是负2147483647,这样他的原码范围就出来了,其正确范围为-2147483648 - 2147483647,它们的正负都是不对称的。
最后加上无负号情况
