如何不借助十进制换算和减号计算两个十六进制数的差值
十六进制无减法求差值操作方案
核心逻辑利用补码加法规则:减去一个数等价于加上该数的同位数补码,全程运算都在十六进制体系下完成,无需转换十进制,也不需要使用减号运算符。
具体操作步骤
- 步骤1:对齐两个数的位数
被减数为3位十六进制数12C,将2位的减数78补前导零扩展为3位,得到078,统一按3位十六进制规则运算。 - 步骤2:获取减数的十六进制反码
无需做减法,直接用十六进制单比特反码映射关系查询即可:0↔F、1↔E、2↔D、3↔C、4↔B、5↔A、6↔9、7↔8,将078每一位按映射转换:
第1位0→F
第2位7→8
第3位8→7
得到反码结果为F87。 - 步骤3:计算减数的补码
给反码加1(十六进制加法):F87 + 1 = F88,即为078对应的3位十六进制补码。 - 步骤4:被减数加补码后截断溢出位
将被减数12C与补码F88做十六进制加法,满16进1:
3位运算只保留低3位,截断最高位的溢出进位1 2 C + F 8 8 -------- 1 0 B 41,最终得到差值为B4。
结果校验
B4转十进制为11*16 + 4 = 180,和300-120的十进制结果一致,运算正确。
内容的提问来源于stack exchange,提问作者leauradmin
相关产品推荐
相关产品推荐

