这个是我自己总结的,如果你还不知道补码是什么,那么请你去看我写的基础知识2
好那么怎么快速转换补码呢?我们每次把一个数值转化成 0,1 然后进行转换其实我们完全可以忽略这个过程 用一个公式来推导
ps:不知道我是不是第一个发现的啊。。我觉得也不可能把。。
首先 对于 一个8位二进制数而言
任何 0开头的 二进制信息 都是正的
任何 1开头的 二进制信息 都是负的
这代表 对于一个8位的二进制数
他的正数范围是 0~01111111
负数范围是10000000~1111111
也就是正数实际值是0~127
负数实际值是 128~255
正数的逻辑值是他本身
而负数的逻辑值是 -128~-1
8位的有效范围 是-128~127
对于大于 127 的数字 X
他的补码表示数值为-(256-X)
对于小于0的数字 X
他的补码表示数值为 256+(x)
例如
mov al,10H
al=16
add al,90H
al=90h=144 144>127 所以他表示的数值为-(256-144)
=-112
16+ -112=-96
-96的补码形式是 256+(-96)=160
由于160>128所以他表示的实际数值为 - (256-160)
对于128 他的二进制信息是以1 开头 所以 他的逻辑值是个负数
但是 他本是也可以表示无符号数的128,这个是他实际值是128
在8位中 128的逻辑值就是 -128
再如255 他的二进制信息也是以1开头 所以他的逻辑值也是个负数
但是但是 他本是也可以表示无符号数的255,这个是他实际值是255
在8位中 255的逻辑值就是 -1
当你看到内存中一个内存单元的数据的时候 如果他是 字节型数据的话 那么大于127的数字就都是负数的,想知道他的 逻辑值 可以用 -(256-X)的公式
如果是一个字型数据的话 这个我暂时不发表 对于基础谈到这里足够 剩下的让大家自己去探索吧! |