【NB】和我一起学汇编之原码反码补码
书接上回,上次讲了有符号数正数的编码规则,这回我们说有符号数负数的编码规则。
在说这之前我们要先明白原码反码和补码
负数的编码规则(负数是按补码存储的)
原码:最高位为符号位,其余各位为这个数本身的绝对值
反码:正数的反码与原码相同
负数:符号位为1,其余为对原码取反
补码:正数的补码与原码也相同
负数 符号数为1,其余位对原码取反,再加1
例如//8bit举例
1原码/反码/补码00000001http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p9mAdFuSAAA6EwEYMVM944.png
http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p9qABtgAAABJ72Dz62U778.png
这里看到图中的数据为01.这个01是十六进制,那么转为二进制就是00000001 相符。(6也同理)
6原码/反码/补码00000110
-1 原码10000001 反码11111110 补码11111111http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p9qAeldjAACguAV-1VI217.png
这里看到内存中为FF,转为二进制就是11111111
-7 原码10000111 反码11111000 补码11111001
这里得到是F9 即为111111001http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p9uAddZ3AAEN4ef0EK4161.png
那么我们怎么知道多少以内是正数,多少以内是负数呢?http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p-aAZTdeAAT5Q19TQMM071.png
具体看这个图(一字节8bit举例,别的单位同理),当存储的是无符号数是,可以存00到FF
当存储的是有符号数时,00到7F是正数,80到FF为负数
就比如是一个doubleword(双字,32bit)
那么就是00000000到7FFFFFFF是正数,80000000到FFFFFFFF是负数
好了今天的就到这里[爱心][爱心][爱心]
http://cdn.u1.huluxia.com/g4/M01/F9/EF/rBAAdmJ7p-eAMAHCAAKzgdvdi0c759.jpg
页:
[1]