概念
2进制,用两个阿拉伯数字:0、1
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7
10进制,用十个阿拉伯数字:0、1、2、3、4、5、6、7、8、9
16进制,用十六个阿拉伯数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
十六进制
Java例子
使用JDK自带方法,16进制,先转换成10进制,再转换成2进制、8进制、16进制。
//十六进制转成十进制
System.out.println("十六进制转成十进制:"+Integer.valueOf("e",16).toString());
//十六进制转成二进制
System.out.println("十六进制转成二进制:"+Integer.toBinaryString(Integer.valueOf("FFFF",16))); //16进制先转换成10进制,再转换成2进制
//十六进制转成八进制
System.out.println("十六进制转成八进制:"+Integer.toOctalString(Integer.valueOf("FFFF",16))); //16进制先转换成10进制,再转换成8进制
十六进制转成十进制:14
十六进制转成二进制:1111111111111111
十六进制转成八进制:177777
十进制
10转2
整数
10进制数转换成二进制数,这是一个连续除2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
整数除以2,商继续除以2,得到0为止,将余数逆序排列。
例子1
转换6为二进制数
三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110。
例子2
转换22为二进制数
22 /2 11 余 0
11 /2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
所以22的二进制是10110
负数
将10进制负数转换为2进制:先得到该10进制负数的绝对值,然后转换为2进制,然后将该2进制取反,然后加1。
例子
-85
得到绝对值:85
转换为二进制:01010101
取反:10101010
+1:10101011(补码)
-85转换为二进制为10101011。
小数
小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。
例子
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,结束
所以0.8125的二进制是0.1101(取整数部分)
10进制22.8125等于2进制10110.1101
10转8
整数
除数8,取整数。
来看一个例子,如何将十进制数120转换成八进制数。
120转换为8进制,结果为:170。
小数
小数乘以8,取整,小数部分继续乘以8,取整,得到小数部分0为止,将整数顺序排列。
例子
0.12*8=0.96, 取0 (整数部分得 0, 小数部分为0.96, 下次再用)
0.96*8=7.68, 取7 (整数部分得 7)
0.68*8=5.44, 取5 (整数部分得 5)
0.44*8=3.52, 取3 (整数部分得 3)
0.52*8=4.16, 取4 (整数部分得 4)
10转N
10进制数转换成16进制的方法,和转换为2进制、八进制的方法类似,惟一变化:除数由2变成16。
Java例子
使用JDK自带方法,10进制转换成2进制,8进制,16进制。
//十进制转成十六进制
System.out.println("十进制转成十六进制:"+Integer.toHexString(14));
//十进制转成八进制
System.out.println("十进制转成八进制:"+Integer.toOctalString(14));
//十进制转成二进制
System.out.println("十进制转成二进制:"+Integer.toBinaryString(14));
十进制转成十六进制:e
十进制转成八进制:16
十进制转成二进制:1110
八进制
Java例子
使用JDK自带方法,8进制,先转换成10进制,再转换成2进制、10进制、16进制。
//八进制转成二进制
System.out.println("八进制转成二进制:"+Integer.toBinaryString(Integer.valueOf("23",8)));
//八进制转成十进制
System.out.println("八进制转成十进制:"+Integer.valueOf("23",8).toString());;
//八进制转成十六进制
System.out.println("八进制转成十六进制:"+Integer.toHexString(Integer.valueOf("23",8)));
八进制转成二进制:10011
八进制转成十进制:19
八进制转成十六进制:13
二进制
2转10
整数
例子1
110换成10进制
2,1,0
$(110)_2$ = $12^2+12^1+0*2^0$ = 6
例子2
7,6,5,4, 3,2,1,0
$(1111 ,1011)2$=$(FB){16}$
1111=8+4+2+1=15;
1011=8+2+1=11;
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
负数
将2进制负数转换为10进制:先对该2进制数取反,然后加1,再转换为10进制,然后在前面加上负号。
例子
10101011 最高位为1,所以为负数
取反: 01010100
+1 : 01010101(补码)
转换为10进制:85
加上负号: -85
所以10101011 转换为十进制为 -85。
2转8
2换8进制时,从右到左,三位一组,不够补0。
例子
111:2的2次方,2的1次方,2的0次方。
4 2 1
010 110 111 011
然后每组中的3个数分别对应4、2、1,然后再相加。
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
结果为:2673
2转16(8421)
8.4.2.1 分别是4位二进数的位取值。
- 二进制 <-> 十六进制:8 4 2 1 :1111=8+4+2+1,1001=8+0+0+1 ->
- 二进制 <-> 八进制 :4 2 1 :101=4+0+1,110=4+2+0
Java例子
使用JDK自带方法,2进制,先转换成10进制,再转换成8进制、10进制、16进制。//二进制转八进制 System.out.println("二进制转八进制:"+Integer.toOctalString(Integer.parseInt("0101", 2))); //二进制转十进制 System.out.println("二进制转十进制:"+Integer.valueOf("0101",2).toString()); //二进制转十六进制 System.out.println("二进制转十六进制:"+Integer.toHexString(Integer.parseInt("0101", 2)));
二进制转八进制:5 二进制转十进制:5 二进制转十六进制:5
原码、反码、补码
在计算机中,负数以其正值的补码形式表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0(-5)。原码
一个整数,按照绝对值大小转换成的二进制数,称为原码。例子
00000000 00000000 00000000 00000101
是5的原码。反码
将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指
原为1,得0;原为0,得1。(1变0; 0变1)例子
将00000000 00000000 00000000 00000101
每一位取反,得11111111 11111111 11111111 11111010
。11111111 11111111 11111111 11111010
是00000000 00000000 00000000 00000101
的反码。
反码是相互的,所以也可称11111111 11111111 11111111 11111010
和00000000 00000000 00000000 00000101
互为反码。补码
反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。例子1
00000000 00000000 00000000 00000101
的反码是11111111 11111111 11111111 11111010
。
那么,补码为11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
。
所以,-5 在计算机中表达为11111111 11111111 11111111 11111011
。转换为十六进制0xFFFFFFFB
。例子2
-1在计算机中如何表示。假设这也是一个int类型。 -> - 先取1的原码
00000000 00000000 00000000 00000001
- 得反码
11111111 11111111 11111111 11111110
- 得补码
11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为0xFFFFFFFF
。