哎呀,查了一下,发现说错了刚才,罪过啊!!~~二进制的负数是用补码来表示的,就是反码+1,反码是把每一位(除符号位)都求反,即每位0、1互换,所得的数再加1。
0就是0000
0000
0000
0000,第一位相当于符号位,正数取0,负数取1。
0111
1111
1111
1111表示正2的15次方减一,第一位0表示正数。负2的15次方减一就是1000
0000
0000
0001,第一位1表示是负数。所以负2的15次方是1000
0000
0000
0000。大概是这么回事
因为中间有个0.你看,比如说sized char是8字节,可以表示从0-255(为什么?因为256就是九字节了,试试看)一共256个数字,可以表示从(-128,127),这意味着从-128到-1是128个数字,而从0到127也是128个数字!是不是?
目前计算机都使用补码来计数,先介绍下吧(我估计你知道的):
原码:就是原来的表示方法
反码:是除符号位(最高位)外取反
补码:反码+1
一般最高位1为负数,最高位0位正数
16位太多了,我拿2位举个例子:2位2进制有以下组合:00.01.11.10
00:0无争议
01:1无争议
11:-1无争议
10:最前位1表示负数,反码为11,补码为1(10)可以理解为符号为不参加计算,即-2
还可以用另外一种方法运算以下:-1+(-1)=-2
在二进制加法运算中:[X+Y]补 = [X]补 + [Y]补,-1补码为11
11(二进制)+11(二进制)=10(由于最高位溢出110变为10),即-1-1=-2
所以可以解释2位的二进制表示负2的1次方到2的1次方减一。
最终得出结论一个要减一而一个不减一呢
希望对你有些用处
我想是这个样子的
因为 符号可能是 双字节 也就是 占2个字节 16位 BIT
因为 最高位要 当符号位使用 那么有效位数就是 15位
至于为什么要减一 我用 4位BIT 来举例啊
比如 负数 最大的数是 1111 最高位 位符号位 1 表示负
那么 正数了 就是 0111 如果 你要加 1 那么这个数 就成了 10000
就算 系统 可以把你最高位的 益处 处理掉 那也是 0000 是0 重复了
所以 正数 最大的数 要 少1
我的理解 也可能不完全正确 !
二进制的问题。比如四位二进制1111,换成十进制就是15,2的4次减1。16位的自然是2的15次-1了。