补码转十进制

笔算快速将补码转十进制

Posted by Chen on August 1, 2019

“一切过往,皆为序章 ”

最近因为一个溢出问题,在纸上演算了一遍补码转十进制的过程,这也是我大一记住的方法,特与诸君分享。

正数的补码直接就是二进制值,所以直接把二进制转化为十进制即可。

首先讲一个负数怎么用补码表示,比如-52,52 = 4+16+32 ,故52用八位二进制表示为0011 0100

-52则把最前面的符号位设置为1, 所以 -52 = 1011 0100(源码),转换为反码,1100 1011(反码),再+1即是补码, 1100 1100(补码)。

那么如何知道 1100 1100十进制是多少呢,只需要从右边入手,遇到0不变,直到遇到第一个1,这个1也不变,之后把后面的数置反即可。

在这里,从右边第一位开始,连续两个0都不变,第三位的1也不变,然后开始置反,得到 0011 0100,这个二进制的值就是 4+16+32 = 52,再加上负号,即是52。

那么反过来如何把一个负数用补码表示呢,比如-52,首先把52转换为二进制,0011 0100,从右边入手,数字不变,直到遇到一个1,这个1也不变,把之后的数字置反即可,所以直接变为 1100 1100。

正常来讲都会有个口诀:

右边开始,直到见1,之后翻转。

临时胡诌,有灵感的可以邮件发我,给改。

—— Chen