先说一般的计算方法。计算机相关专业(嘿嘿本人就是那个相关)的人都知道,大致应该这样计算:
- 去掉符号位
(b)10101010>(b)00101010 - 低7位取反
(b)00101010>(b)01010101 - 加1
(b)01010101>(b)01010110 - 二进制->十进制
(b)01010110>64+16+4+2=86
结果是-86. 你用了多长时间呢?
上述计算中用到了二进制转十进制,求补码,如果再加上十进制转二进制运算,基本上可以涵盖编程时遇到的大部分相关计算。
如果上网去搜的花,光篇幅就会吓到你。
其实可以通过十六进制+简单的乘除法大大提高运算速度。
地球上的程序员应该都知道,二进制,十六进制,十进制各数字的关系如下:
二进制 十六进制 十进制
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
我们就利用上面的对应关系来加快计算速度。
二进制转十进制
1.先将二进制转换成十六进制
(b)10101010->(h)AA
2.将十六进制转换成到10进制。
(hex)AA>10x16+10=170
十进制转二进制
- 十进制转成十六进制(用16除)
170=16x10+10>(hex)AA - 十六进制转二进制
(h)AA->(b)10101010
求补码
我们已经知道(bin)10101010就是170,用256-170得到86,而-86就是(bin)10101010被看作8位有符号数时的值。
如果16位求补码就用65536做被减数。以此类推。
是不是很帅?
计算二进制(bin)10101010等于负几你要花多长时间?
更多最新文章请扫码关注【面向对象思考】公众号