吃过猪肉的都知道,计算机是基于二进制数补码的,一般我们是怎样计算二进制补码的呢?如下(仅举一个简单的例子):
正数:01110110(2)=64+32+16+4+2=118(10);
负数:10100111(2)
1、二进制取反后+1,得到:-01011001(2);
2、-01011001(2)=-(64+16+8+1)=-89(10);
可以看出,对于二进制补码表示而言,正数转换为十进制表示很方便,但负数要经过二进制取反后加1的步骤。
那么问题来了,有没有统一的公式来将二进制的补码转换为十进制呢(不管是正值还是负值)? 有的,还以上面的例子为例,可用于同时处理正值和负值的一种方法是使用多项式求值,但是,最高有效位的数字具有不同的权重。不要使用,而要使用,如下:
使用统一的公式,可以方便程序员的算法设计。
正数:01110110(2)=64+32+16+4+2=118(10);
负数:10100111(2)
1、二进制取反后+1,得到:-01011001(2);
2、-01011001(2)=-(64+16+8+1)=-89(10);
可以看出,对于二进制补码表示而言,正数转换为十进制表示很方便,但负数要经过二进制取反后加1的步骤。
那么问题来了,有没有统一的公式来将二进制的补码转换为十进制呢(不管是正值还是负值)? 有的,还以上面的例子为例,可用于同时处理正值和负值的一种方法是使用多项式求值,但是,最高有效位的数字具有不同的权重。不要使用,而要使用,如下:
使用统一的公式,可以方便程序员的算法设计。