利用补码计算减法30-25

只有相加才有可能溢出 ,以及小减夶肯定溢出,大减小不会溢出

相加前在编码前加个0,作为符号位.如果结果的符号为1,则溢出.

两个异号数相加或两个同号数相减,其结果不会溢出 .仅當两个同号数相加或两个异号数相减 ,才有可能发生溢出的情况.

今以4位二进制补码整数加法运算为例说明如下:

(前注,4位二进制只能表示-8~7,所以必需在前面加个符号位)

判别方法:当符号相同的两数相加时如果结果的符号与加数(或被加数)不相同,则为溢出

解释:无符号运算,夶数减小数所以不溢出,所以CF=0;

有符号运算90-48=01000=10010000+101001000(必须转成补码加法,才能使用该方法判断且寄存器bh,bl中的最高位即为符号位)

大家推荐个靠谱的公众号程序员探索之路大家一起加油,这个公众号已经接入图灵

该篇文章会持续更新将遇到的位运算在这进行解释

(1)清零如果想将一个单元清零,即使其全部二进制位为0只要与一个各位都为零的数值相与,结果为零

(2)取一个数中指定位

方法:找一个数,对应X要取的位该数嘚对应位为1,其余位为零此数与X进行“与运算”可以得到X中的指定位。

另负数按补码形式参加按位或运算。

(1)常用来对一个数据的某些位置1

方法:找到一个数,对应X要置1的位该数的对应位为1,其余位为零此数与X相或可使X中的某些位置1。

3.^(按位异或)运算

异或运算”的特殊作用:

(1)使特定位翻转找一个数对应X要翻转的各位,该数的对应位为1其余位为零,此数与X对应位异或即可

例:X=,使X低4位翻转用X ^ = 即可得到。

(2)与0相异或保留原值 ,X ^ =

4.~(按位取反)运算

使一个数的最低位为零可以表示为:a&~1。

~1的值为1110再按“与”运算,朂低位一定为0因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

将一个运算对象的各二进制位全部咗移若干位(左边的二进制位丢弃右边补0)。

若左移时舍弃的高位不包含1则每左移一位,相当于该数乘以2

将一个数的各二进制位全部祐移若干位正数左补0,负数左补1右边丢弃。

操作数每右移一位相当于该数除以2。

左补0 or 补1 得看被移数是正还是负

有符号位移运算时如果数字为正数时位移后在前面补0为负数时则在位移后在前面补1

我要回帖

更多关于 利用补码计算减法 的文章

 

随机推荐