1. 二进制转十进制
按照数据类型分为三种:无符号的二进制整数,有符号的二进制整数和小数二进制数。
1.1 无符号的二进制整数
计算技巧: 从二进制数的右边第一位起,从右往左,先用二进制位置上的数乘以2的相应位数的幂,然后把每一位的乘积相加即可得到二进制数对应的十进制数。
例如:二进制整数 110,从右往左分别标记位数,0,1,2。(注意,位数从0开始标记),根据二进制位置上的数和位数,产生计算过程数,如下图所示:
位数 | 2 | 1 | 0 |
---|---|---|---|
二进制数 | 1 | 1 | 0 |
计算过程数 | 1*2^2 | 1*2^1 | 0*2^0 |
最后,将计算过程数字求和
1 * 2^2 = 4
1 * 2^1 = 2
0 * 2^0 = 0
最终十进制结果: 4+2+0 = 6。
1.2 有符号的二进制整数
计算技巧: 最高位是符号位(1为负数,0为正数),除去符号位后的剩余位按照无符号的二进制转换方式计算。
例如:有符号的二进制整数1110,符号位(即最高位)是1,则为负数,剩余110按照“1.1章节”方式计算为6,最终十进制结果:-6。
1.3 小数二进制数
计算技巧: 小数分为整数位和小数位。 整数位部分按照“1.1章节”方式计算;小数部分从小数点开始向右标记位置,起始位为-1,以此标记到第-n位结束,然后以二进制小数位上的数乘以2的相应位数的-n次幂。
例如:小数二进制数 110.011,从小数点开始,整数位从右往左,从0到n,求m * 2^n的和;小数位从左往右,从-1到-n,求m * 2 ^-n的和。如下图所示:
位数 | 2 | 1 | 0 | - | -1 | -2 | -3 |
---|---|---|---|---|---|---|---|
二进制数 | 1 | 1 | 0 | . | 0 | 1 | 1 |
计算过程数 | 1*2^2 | 1*2^1 | 0*2^0 | - | 0*2^-1 | 1*2^-2 | 1*2^-3 |
最后,将计算过程数字求和
1 * 2^2 = 4
1 * 2^1 = 2
0 * 2^0 = 0
0 * 2^-1 = 0
1 * 2^-2 = 1/4 = 0.25
1 * 2^-3 = 1/8 = 0.125
最终十进制结果:4+2+0+0+0.25+0.125 = 6.375
2. 十进制转二进制
十进制转二进制,分成两个部分,整数和小数。符号就根据计算结果在最高位增加符号位即可(1为负数,0为正数)。
2.1 十进制整数转二进制
计算技巧: 将整数除以2,如果商不为0,取商继续除以2,直至商为0,将余数从下到上列出即为二进制结果。
例如:十进制整数 6 。
十进制整数 | 6 | 余数 |
---|---|---|
除2的商数 | 3 | 0 |
除2的商数 | 1 | 1 |
除2的商数(除不尽直接记1) | 0 | 1 |
从下往上取余数,最终二进制结果为110。
2.2 十进制小数转二进制
计算技巧: 将其分为整数和小数两部分,整数部分按照"2.1章节"方式计算;小数部分乘以2取整,如果结果仍有小数继续用小数部分乘2,直到小数部分为0,或者达到精度要求为止,最后将取整部分从上到下即为小数部分的二进制结果。
例如:十进制小数 6.75 ,整数部分按照2.1计算结果为110,小数部分拆分单独计算,即0.75。
十进制小数 | 0.75 | 取整 | 小数部分 |
---|---|---|---|
乘以2 | 1.50 | 1 | 0.50 |
小数部分继续乘以2 | 1.00 | 1 | 0.00 |
从上到下取整的二进制结果为11,最终二进制结果为110.11。
2.3 负数转二进制
计算技巧: 在最高位添加符号位(1为负数,0为正数)即可。
例如: -6.75转十进制为1110.11。