1.无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值,表示非负数。
8位空间能表示的无符号数为[0000-0000]~[1111-1111] <==> 0~255
2.有符号数指的是整个机器字长的部分二进制位用于表示符号位,能表示正负数。
8位空间能表示的有符号数:
最高位表示符号位: 0表示正数,1表示负数
正数范围:[0000-0000]~[0111-1111] <==> 0~127
负数二进制范围:[1000-0000]~[1111-1111]
那是不是-1的二进制码就是1000-0001呢?
但是我们看到的都是-1的二进制码是1111-1111呀!
难道我们推理错了吗?其实我们看到的没错,我们推理的也没错,只是不同的选择罢了。
-1 <=> 1000-0001 (这是我们的选择方案A)
-1 <=> 1111-1111 (这是现实的选择方案B)
新的问题来了,既然都没有错为什么现实的选择是1111-1111来表示-1而不是1000-0001呢?(why not me ?)
我们都知道:
(-1) + (1) = 0
此刻有两种情况:
1000-0001 + 0000-0001 = 1000-0010 (方案A)
1111-1111 + 0000-0001 = 1-0000-0000 (方案B)
相信此刻我们都明白了是怎么回事:
显然方案A的到的结果1000-0010没有的到0的二进制码0000-0000(显然我们也可以这么用只是计算机在计算的时候得对1000-0010进行判断然后转换)
方案B的到的结果1-0000-0000发现已经进位啦,因为是8位的空间所以最终存下来的只有0000-0000也就是0的二进制码。(其实进位1没有被丢弃,是被保存到标志寄存器的进位标识位啦)
这就是为什么现实选择的是B方案而没有选择我们推导的A方案的原因啦.B方案方便了计算机的运算
有没有觉得 (-n) 和 (n)是像是一个圆的一部分互补填满整个圆 (-n) + (n) = 1-0000-0000
这就是补码背后的含义,以后就可以不用死记公式负数的二进制码啦(^_^)