在计算机领域有四种比较常见的进制,分别是二进制、八进制、十进制和十六进制。
一、二进制(Binary)
二进制(Binary)是一种基数为2的数值系统,仅使用两个符号:0和1。所以它的进位规则就是逢二进一。
就如使用二进制从一数到五就是:
1,10,11,100,101
从 Java 7 开始,Java 支持使用二进制字面量来表示整数。这使得代码在涉及低级位操作和硬件编程时更具可读性。二进制字面量以 0b
或 0B
开头,后跟实际的二进制数字(0和1)。下面是一些使用二进制字面量的示例:
public class Test {public static void main(String[] args) {// 使用二进制字面量初始化整数int num1 = 0b101; // 二进制中的 101 是十进制的 5int num2 = 0b1101; // 二进制中的 1101 是十进制的 13int num3 = 0B100000; // 二进制中的 100000 是十进制的 32// 打印结果System.out.println("num1 = " + num1); // 输出: num1 = 5System.out.println("num2 = " + num2); // 输出: num2 = 13System.out.println("num3 = " + num3); // 输出: num3 = 32}
}
运行结果:
二、八进制(Octal)
八进制数值系统的基数是8,因此它使用的字符为0到7。它的进位规则就是逢八进一。
对于八进制从一数到十就是:
1,2,3,4,5,6,7,10,11,12
在Java中,八进制常量以 0
作为前缀,后跟实际的八进制数字。下面是一些使用八进制字面量的示例:
public class Test {public static void main(String[] args) {// 使用八进制字面量初始化整数int num1 = 0123; // 八进制中的 123 是十进制的 83int num2 = 077; // 八进制中的 77 是十进制的 63int num3 = 05; // 八进制中的 5 是十进制的 5// 打印结果System.out.println("num1 = " + num1); // 输出: num1 = 83System.out.println("num2 = " + num2); // 输出: num2 = 63System.out.println("num3 = " + num3); // 输出: num3 = 5}
}
运行结果:
三、十进制(Decimal)
十进制使我们在生活中常用的进制,它使用 0 到 9 这十个基数标识。进位规则就是逢十进一。对于 System.out.println(); 打印出来的数值一般就是十进制,方便人类查看。
在 Java 中,我们经常使用十进制常量,十进制常量没有特殊前缀。下面是一些使用十进制进制字面量的示例:
public class Test {public static void main(String[] args) {// 使用八进制字面量初始化整数int num1 = 223; // 十进制的 223int num2 = 93; // 十进制的 93int num3 = 56; // 十进制的 56// 打印结果System.out.println("num1 = " + num1); // 输出: num1 = 223System.out.println("num2 = " + num2); // 输出: num2 = 93System.out.println("num3 = " + num3); // 输出: num3 = 56}
}
运行结果:
四、十六进制(Hexadecimal)
十六进制使用16个符号来表示数值,即0-9和A-F,其中A代表10,B代表11,C代表12,D代表13,E代表14,F代表15。
在Java中,十六进制常量以 0x
或 0X
作为前缀,后跟具体的十六进制数值。下面是一些使用十六进制字面量的示例:
public class Test {public static void main(String[] args) {// 使用十六进制字面量初始化整数int num1 = 0x1A3F; // 十六进制中的 1A3F 是十进制的 6719int num2 = 0xFF; // 十六进制中的 FF 是十进制的 255int num3 = 0x7E; // 十六进制中的 7E 是十进制的 126// 打印结果System.out.println("num1 = " + num1); // 输出: num1 = 6719System.out.println("num2 = " + num2); // 输出: num2 = 255System.out.println("num3 = " + num3); // 输出: num3 = 126}
}
运行结果:
五、常见进制间相互转化
1、二进制转十进制
将二进制数转换为十进制数的方法是将每一位上的数乘以对应的2的幂,然后求和。
转换步骤:
- 从右到左,给二进制数的每一位赋予指数值,起始值为0。
- 将每一位上的数字乘以2的幂次。
- 把所有的乘积相加,得到十进制结果。
例如:
也就是说先将每一位的值乘上 2 的每一位的位数减一次方,然后将结果相加起来,就是最终转换的十进制结果。
2、八进制转十进制
将八进制数转换为十进制数的方法是将每一位上的数乘以对应的8的幂,然后求和。
转换步骤:
- 从右到左,给八进制数的每一位赋予指数值,起始值为0。
- 将每一位上的数字乘以8的幂次。
- 把所有的乘积相加,得到十进制结果。
示例:
也就是说先将每一位的值乘上 8 的每一位的位数减一次方,然后将结果相加起来,就是最终转换的十进制结果。
3、十六进制转十进制
将十六进制数转换为十进制数的方法是将每一位上的数乘以对应的16的幂,然后求和。
转换步骤:
- 从右到左,给十六进制数的每一位赋予指数值,起始值为0。
- 将每一位上的数字乘以16的幂次。
- 把所有的乘积相加,得到十进制结果。
示例:
也就是说先将每一位的值乘上 16 的每一位的位数减一次方,然后将结果相加起来,就是最终转换的十进制结果。
4、十进制转二进制
将十进制数转换为二进制数的方法是通过不断除以2,并记录每次除法的余数,直到商为0。然后将余数逆序排列。
转换步骤:
- 将十进制数除以2,记录余数。
- 用商继续除以2,继续记录余数。
- 重复上述步骤,直到商为0。
- 将所有记录的余数逆序排列,即得到二进制数。
示例:
5、十进制转八进制
将十进制数转换为八进制数的方法是通过不断除以8,并记录每次除法的余数,直到商为0。然后将余数逆序排列。
转换步骤:
- 将十进制数除以8,记录余数。
- 用商继续除以8,继续记录余数。
- 重复上述步骤,直到商为0。
- 将所有记录的余数逆序排列,即得到八进制数。
示例:
6、十进制转十六进制
将十进制数转换为十六进制数的方法是通过不断除以16,并记录每次除法的余数,直到商为0。然后将余数逆序排列。如果余数是10到15,分别用A到F表示。
转换步骤:
- 将十进制数除以16,记录余数。
- 用商继续除以16,继续记录余数。
- 重复上述步骤,直到商为0。
- 将所有记录的余数逆序排列,即得到十六进制数。
示例:
十六进制和八进制是为了简化表示和使二进制更易读而引入的。因为二进制在表示较大的数时,通常位数较多,八进制和十六进制可以简化二进制的位数个数,是数据更易读。
7、二进制转八进制
将二进制数转换为八进制数的方法是将二进制数每三位一组(从右到左),然后将每组转换为对应的八进制数。为什么是三位呢,因为三位二进制数刚好可以表示 0 到 7 这八个数,刚好是八进制的八个基数。
转换步骤:
- 从右向左,将二进制数每三位一组,不足三位的前面补0。
- 将每组转换为对应的八进制数。
- 组合所有八进制的数,得到最终结果。
示例1:
示例2:
8、二进制转十六进制
将二进制数转换为十六进制数的方法是将二进制数每四位一组(从右到左),然后将每组转换为对应的十六进制数。为什么是四位呢,因为四位二进制数刚好可以表示 0 到 15 这16个数,刚好是十六进制的十六个基数。
转换步骤:
- 从右向左,将二进制数每四位一组,不足四位的前面补0。
- 将每组转换为对应的十六进制数。
- 组合所有十六进制的数,得到最终结果。
示例1:
示例2:
9、八进制转二进制
将八进制数转换为二进制数的方法是通过将八进制数的每一位数字转换为对应的三位二进制数,然后将这些二进制数拼接起来。
转换步骤:
- 将八进制数的每一位数字转换为对应的三位二进制数。
- 将所有的三位二进制数拼接起来,即得到二进制数。
示例:
10、十六进制转二进制
将十六进制数转换为二进制数的方法是通过将十六进制数的每一位数字转换为对应的四位二进制数,然后将这些二进制数拼接起来。
转换步骤:
- 将十六进制数的每一位数字转换为对应的四位二进制数。
- 将所有的四位二进制数拼接起来,即得到二进制数。
示例: