2进制:0b / 0B 8进制:0 016进制:0x / 0X
所有的数字在计算机底层都是以二进制形式存在,且以补码的形式保存所有整数。
(1)二进制和十进制之间的转换(重点)
a.正十进制转换为二进制
1)除2取余法,十进制整数不断除以2取余并记录,直到商为0时停止,将余数进行反向排列。
2)拆分法,将十进制整数拆分为多个二进制权重的和,若该权重存在则写1,否则写0即可
如:57 = 32 + 16 + 8 + 1
二进制的权重:128 64 32 16 8 4 2 1
0 0 1 1 1 0 0 1
---------------------------------------------------------------------------------
b.正二进制转换为十进制
1)加权法,让二进制的当前位数字乘以当前位的权重,再将各个乘积累加起来即可。
0011 1001 => 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 0*2^6 + 0*2^7
=> 57
---------------------------------------------------------------------------------
c.负 十进制转换为二进制
1)将该整数的绝对值拆分为二进制,然后进行按位取反,再加1。
如:-57转换为二进制: 57转换为二进制:0011 1001
按位取反:1100 0110
再加1:1100 0111
-57 + 57 = 0
-57: 1100 0111
+57: 0011 1001
--------------------
1 0000 0000(溢出)
---------------------------------------------------------------------------------
d.负二进制转换为十进制
1)将二进制数位进行按位取反,再加1,转换为十进制整数后添加负号。
1100 0111 进行按位取反:0011 1000
再加1:0011 1001
转换为十进制整数:57
添加负号:-57
(2)二进制和八进制的转换(熟悉)
a.二进制转换为八进制
1)将每三位二进制转换为一位八进制,转换的结果前面加0作为八进制的前缀。
010 011(二进制) => 023(八进制)
b.八进制转换为二进制
1)将每一位八进制拆分为三位二进制,转换的结果前面加0b作为二进制的前缀(jdk1.7)。
023(八进制) => 0b010 011(二进制)
---------------------------------------------------------------------------------
(3)二进制和十六进制的转换(熟悉)
a.二进制转换为十六进制
1)将每四位二进制转换为一位十六进制,转换的结果前面加0x作为十六进制的前缀。
0101 0011(二进制) => 0x53(十六进制)
1011 1001(二进制) => 0xb9(十六进制,使用a~f来表示数字10~15)
b.十六进制转换为二进制
1)将每一位十六进制拆分为四位二进制,转换的结果前面加0b作为二进制的前缀
0xab(十六进制) => 0b1010 1011(二进制)