心血来潮,突然想写写这两者之间的转换,以做记录所用:
//---------------------10进制转2进制----------------------
1、正整数转二进制
不断的除2,取余数,反写得到的结果就是该数值的2进制
42 转 2进制
42 / 2 = 21 -------0 (低位)
21 / 2 = 10 -------1
10 / 2 = 5 -------0
5 / 2 = 2 -------1
2 / 2 = 1 -------0 (高位)
1 / 2 = 0 -------1
101010 补齐 0010 1010
1个字节是:8位 int类型,4个字节,那么就应该是32位
2、负整数转二进制
先不管符号直接获得二进制,然后取反,再 + 1
42 转 2进制
0010 1010
取反
1101 0101
再 + 1
1101 0110 = -42
3、小数转二进制
整数部分依旧遵循上述转换方法,小数部分不断 * 2 取整就是了(反正不是1就是0)
42.125
42转二进制后是:0010 1010
0.125 转2进制
0.125 x 2 = 0.25 -----0
0.25 x 2 = 0.5 -----0
0.5 x 2 = 1.0 -----1
0.125 就该是0.001
合起来0010 1010.0010 0000 就是42.125
//---------------------2进制转10进制----------------------
4、整数二进制转换为十进制
如何区分一个二进制是正数,还是负数,非常简单,看补齐后的首位是0或者1,0就是整数,1就是负数
101010 先补齐 0010 1010
然后再每位,乘于2^n ,分别相加就可以了,如:
0 * 2^0 = 0
+ 1 * 2^1 = 2
+ 0 * 2^2 = 0
+ 1 * 2^3 = 8
+ 0 * 2^4 = 0
+ 1 * 2^5 = 32
得到42
5、负整数二进制转换为十进制
1101 0110
首位是1,说明这是1个负整数,应该先-1,并且取反,再每位,乘于2^n ,分别相加就可以了,如:
1101 0110
- 0000 0001
= 1101 0101
取反:0010 1010 后分别再乘以2的n次方,最后相加
0 * 2^0 = 0
+ 1 * 2^1 = 2
+ 0 * 2^2 = 0
+ 1 * 2^3 = 8
+ 0 * 2^4 = 0
+ 1 * 2^5 = 32
得到42,再加上符号,为-42
注意:二进制的减法,与十进制的减法一致,不够就去高位借,只不过十进制中,借的1位相当于10,在二进制中,借的1位相当于2
如:
1100 0011
- 0010 1101
= 1001 0110
二进制的加法,也与十进制的加法一致,多了就向前进一位
如:
0000 0111
+ 0000 1110
= 0001 0101
6、小数二进制转十进制
0010 1010.0010 0000 转10进制
小数点之前是:
0 * 2^0 = 0
+ 1 * 2^1 = 2
+ 0 * 2^2 = 0
+ 1 * 2^3 = 8
+ 0 * 2^4 = 0
+ 1 * 2^5 = 32
小数点之后是:
0 * 2^-1 = 0
+ 0 * 2^-2 = 0
+ 1 * 2^-3 = 0.125
所以加起来就是:0.125 合起来就是:42.125