正数没有什么好说的,原码反码补码皆是一样的;
对于负数,要注意了:
只要是从补码推原码,一律是取反加一,例如下面一个例子:
补码----------------------------------------------------------------> 原码
1111 1111 1000 0001(-1)
下面以八位二进制进行举例:
补码----------------------------------------------------------------> 原码
0000 0000 0000 0000
0000 0001 0000 0001
……
0111 1111 127
1000 0000 -128
10000 0001 -127
……
1111 1111 -1
小结:有符号位八位二进制数值范围:-128~127(负数与非负数的个数一样:-128,-127,…-1共计128个负数,0,1,2,3,4…127共计128个非负数)
补码推导原码:
注意 :在OD中,寄存器中的值一般都是以补码形式出现的.!!!!!
1111 1111 取反为0000 0000
再加1,为00000001,由于它是一个负数
所以原码为1000 0001(-1)
小结:补推原:取反加1,添加符号位
原码推导补码 :
与补码推导原码有一点不同,
保持符号位不变,然后再取反加一
例子:已知10000001(-1)求其补码 (加1)
1000 0001(保持符号位不变,取反)-------->1111 1110-------------->1111 1111(-1的补码)
这里需要注意的是:如果将1000 0001看成补码的话,那么进行上面的"补推原"操作,
将会得到0111 1111(127)----->(添加符号位)1111 1111(-127)
也就是说补码位1000 0001的原码为-127
小结:原推补,保持符号位不变, 取反加1,
二进制与十六进制之间的转换:
二进制 十六进制
0000---------->0
0001----------->1
0010------------>2
0011------------>3
0100------------>4
0101------------>5
0110------------>6
0111------------>7
1000------------->8
10001----------->9
101 0------------>A
101 1------------>B
110 0------------>C
110 1------------->D
111 0----------->E
111 1------------>F