补码与算术右移指令

本文探讨了补码的概念及其在计算中的优越性,特别是在判断溢出和存储负数方面的作用。补码求补过程的性质保证了数值的正确转换。此外,文章还详细解释了算术右移指令SAR,分析了为什么在右移时需要用最高位填充而非补零,以保持数值的符号和大小不变。通过对不同情况的分析,展示了补码和算术右移在处理二进制数值中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

补码与算术右移指令

补码杂谈

补码的优越性,使得用最高位作符号的原码显得多余。正数的补码是它本身,负数的补码通过对其绝对值进行求补获得。求补运算是将数值按位取反,再加一。不要与补码的概念混淆。它具有许多的优良的特性。

求补过程与反求补过程为同一过程,也就是说,对一个数求补两次后,还是这个数本身。通过补码的物理意义这是很好理解的。也可以分析求补的运算过程来说明。对某数按位取反后,加上1,这时开始从最低位向高位进位,直到某个高位上为零,无法向更高位进位为止(当然有个极端的情况的就是对0求补,而0的求补结果为其本身,大可抛开它不谈)。产生的效果是最低的若干位被取反,且这若干位的形式应该为1加上若干个0(当然可以是0个)。这些被加1影响的若干位就相当于被取反了两次,也就是说得到的是它们原来的样子。而未被加1影响的部分则被取反了一次。再进行一次求补运算,看看会出现什么结果。先取反,这样未被加1影响的部分就进行了两次取反而恢复了原貌。而被加1影响部分取反后得到的形式为一个0带上若干个1(可以为0个1),这样的形式在加上1后会被全部取反,而不影响别的部分。这样这部分又恢复了原貌。所以整个数又恢复了原貌。

用补码进行加法运算的时候,易于判断结算是不是溢出。判断的方法是计算次高位与最高位向其高位的进位的异或,结果若为0则表示正常,否则表示溢出。溢出的情形无非两种,分别为两正数与两负数相加的时候。两正数相加是次高位进位时,显然是溢出的情形,而这时最高位为0,无法再进位,这样进位异或结果为1,反映溢出;两负数相加时,最高位肯定有进位。这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值