进制讲解:二进制、八进制、十进制、十六进制相互转换方式及原码、补码、反码介绍
一、进制介绍
对于整数,有四种表示方式:
-
二进制:0-1,满2进1,以0b或0B开头。
-
十进制:0-9,满10进1.
-
八进制:0-7,满8进1,以数字0开头表示。
-
十六进制:0-9及A(10)、B(11)、C(12)、D(13)、E(14)、F(15),满16进1,以0x或0X开头表示。此处的A-F不区分大小写。
举例:
int n1 = 0b1010; // 二进制 int n2 = 1010;// 十进制 int n3 = 01010;// 八进制 int n4 = 0X10101;// 十六进制
进制对照表:
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
17 | 10001 | 21 | 11 |
18 | 10010 | 22 | 12 |
19 | 10011 | 23 | 13 |
20 | 10100 | 24 | 14 |
二、进制转换
-
其他转十进制
-
二进制转十进制
-
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
// 案例:将0b1011转成十进制的数 ob1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3 = 1 + 2 + 0 + 8 = 11;
-
-
八进制转十进制
-
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
// 案例:将0234转成十进制的数 0234 = 4 * 8^0 + 3 * 8^1 + 2 * 8^2 = 156;
-
-
十六进制转十进制
-
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
// 案例:将0x23A转成十进制的数 0x23A = 10 * 16^0 + 3 * 16^1 + 2 * 16^2 = 10 + 48 + 512 = 570;
-
-
练习:
// 二进制转十进制 0b10001100 = 0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 0*2^4 + 0*2^5 + 0*2^6 + 1*2^7 = 4 + 8 + 128 = 140; // 八进制转十进制 02456 = 6*8^0 + 5*8^1 + 4*8^2 + 2*8^3 = 6 + 40 + 256 + 1024 = 1326; // 十六进制转十进制 0xA45 = 5*16^0 + 4*16^1 + 10*16^2 = 5 + 64 + 2560 = 2629;
-
-
十进制转其他
-
十进制转二进制
-
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
//案例:将34转成二进制 34 / 2 = 17; -- 0 17 / 2 = 8; -- 1 8 / 2 = 4; -- 0 4 / 2 = 2; -- 0 2 / 2 = 1; -- 0 //故:34 => 0B00100010;
-
-
十进制转八进制
-
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
//案例:将131转成八进制 131 / 8 = 16 -- 3 16 / 8 = 2 -- 0 //故:131 => 0203;
-
-
十进制转十六进制
-
规则:将该书不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
//案例:将237转成十六进制 237 / 16 = 14 -- 13 //故:237 => ED;
-
-
练习:
// 123 转成 二进制 123 / 2 = 61 -- 1 61 / 2 = 30 -- 1 30 / 2 = 15 -- 0 15 / 2 = 7 -- 1 7 / 2 = 3 -- 1 3 / 2 = 1 -- 1 // 故:123 => 0B01111011; // 678 转成 八进制 678 / 8 = 84 -- 6 84 / 8 = 10 -- 4 10 / 8 = 1 -- 2 // 故: 678 => 01246; // 8912 转成 十六进制 8912 / 16 = 557 -- 0 557 / 16 = 34 -- 13 34 / 16 = 2 -- 2 // 故: 8912 => 22D0;
-
-
二进制转其他
-
二进制转八进制
-
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
//案例:将0b11010101 转成八进制 101 => 5; 010 => 2; 11 => 3; //故:0b11010101 => 0325;
-
-
二进制转十六进制
-
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
//案例:将0b11010101 转成十六进制 0101 => 5; 1101 => 13; //故:0b11010101 => D5
-
-
联系:
//案例:将0b11100101转成八进制 101 => 5; 100 => 4; 11 => 3' //故:0b11100101 => 0345 //案例:将0b1110010110 转成十六进制 0110 => 6; 1001 => 9; 11 => 3; //故:0b1110010110 => 396
-
-
八进制转其他
-
八进制转二进制
-
规则:将八进制数每1位,转成对应的一个3位的二进制数即可。
//案例:将0237 转 成二进制 7 => 111; 3 => 011; 2 => 010; //故:0237 => 0b10011111; //练习:将01230 转 成二进制 0 => 000; 3 => 011; 2 => 010; 1 => 001; //故:01230 => 0b0010 1001 1000;
-
-
-
十六进制转其他
-
十六进制转二进制
-
规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
//案例:将0x23B 转成二进制 B => 1011; 3 => 0011; 2 => 0010; //故:0x23B => 0b0010 0011 1011; //练习:将0xAB29 转成二进制 9 => 1001; 2 => 0010; B => 1011; A => 1010; //故:0xAB29 => 0b1010 1011 0010 1001;
-
-
三、原码、反码、补码
-
二进制的最高位是符号位
0标识正数,1标识负数
-
正数的原码、反码、补码都一样(三码合一)
-
负数的反码 = 它的原码符号位不变,其它位取反(0 --> 1,1 --> 0)
-
负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
-
0的反码,补码都是0
-
java没有无符号数,换言之,Java中的数都是有符号的
-
在计算机运算的时候,都是以补码的方式来运算的
-
当我们看运算结果的时候,要看它的原码