目录
- 原码(Sign-Magnitude)
- 反码(Ones' Complement)
- 补码(Two's Complement)
- 移码(Excess-N)
- 他们之间的相互转换
- 大小比较
- 从老师PPT上抠的经典题目
1.原码(Sign-Magnitude)
方法:原码是最基本的表示法,它用最高位表示符号,其余位表示数值的绝对值。
2.反码(Ones' Complement)
反码表示法是将原码中的负数符号位不变,其它各位取反。
如果是正数,则反码与补码相同!!!
定点小数举例:x=+0.1001,则[x]原=0.1001,[x]反=0.1001(正数相同)
x=-0.1001,则[x]原=1.1001,[x]反=1.0110
定点整数举例:x=+1001,则[x]原=01001,[x]反=01001(正数相同)
x=-1001,则[x]原=11001,[x]反=10110
3.补码(Two's Complement)
方法:
正数:与原码一样
负数:反码的基础上最低有效位+1
定点小数举例:x=+0.1001,则[x]原=0.1001,[x]反=0.1001,[x]补=0.1001(正数相同)
x=-0.1001,则[x]原=1.1001,[x]反=1.0110,[x]补=1.0111
定点整数举例:x=+1001,则[x]原=01001,[x]反=01001,[x]补=01001(正数相同)
x=-1001,则[x]原=11001,[x]反=10110,[x]补=10111
4.移码(Excess-N)//速成版
移码是将补码的所有数值加上一个固定值,然后表示为二进制数的形式。例如,如果选择将补码加上128,则补码为0的数的移码表示为10000000。
速成记法:将移码数值位不变,符号位取反(该用法仅限于计算机组成网络课程)
定点小数举例:
x=+0.1001,则[x]原=0.1001,[x]反=0.1001,[x]补=0.1001(正数相同),[x]移=1.1001
x=-0.1001,则[x]原=1.1001,[x]反=1.0110,[x]补=1.0111,[x]移=0.0111
定点整数举例:
x=+1001,则[x]原=01001,[x]反=01001,[x]补=01001(正数相同),[x]移=11001
x=-1001,则[x]原=11001,[x]反=10110,[x]补=10111,[x]移=00111
5、相互转换
(1)如果是正数,原码、反码、补码都一致
x=+0.1001,则[x]原=0.1001,[x]反=0.1001,[x]补=0.1001(正数相同)
x=+1001,则[x]原=01001,[x]反=01001,[x]补=01001(正数相同
(2)反码符号位、补码符号位、与原码符号位一致,移码符号位与他们三相反
(3)移码符号位取反可得补码
[x]补=01001,则[x]移=11001
[x]补=10111,则[x]移=00111
[x]补=1.0111,则[x]移=0.0111
(4)两次求补码即可得原码
x=-1001,则[x]原=11001,[x]反=10110,[x]补=10111
y=[x]补=10111,则[y]补=11001=[x]原
(5)如果是符号位为负数,则补码最低有效位-1得反码
[x]补=10111, [x]反=10110
(5)反码由原码推出(参见2反码介绍)
(6)补码由反码推出(参见3补码介绍)
(7)移码由补码推出(参加4移码介绍)
6、大小比较
1、反码之间比较大小的方法
反码的大小比较方法较为简单,只需要比较符号位和数值位的大小即可。若两个数的符号位相同,则比较数值位的大小,大的数更大;若两个数的符号位不同,则正数更大。
例如,+3的反码为00000011,-2的反码为11111101,因为+3和-2的符号位不同,因此00000011更大。先比较红色标出的符号位,符号位一致则比较蓝色标出数值位。
2、补码之间比较大小的方法
正数:直接按原码比较大小
负数:转化成反码再比较
2、移码之间比较大小的方法
转换成补码 相互转换中的(3)移码符号位取反可得补码
用补码比较
7、经典题目
【练】设机器字长为8位,用于表示定点小数,其中已知符号位占1位,数值位7位;若数N=-23/128,求N的原码,反码,补码(用二进制表示)。
【解】先求数N的二进制表示,:
分子23=10111,分母128=2的七次方
N=-0. 0010111
因此,数N的原码,反码,补码分别为:
[×]原=1.0010111
[X]反=1.1101000
[X]补= 1.1101001