数据进制问题及 Java 中的数据进制问题
常用的几种进制
-
前缀:用在
数据输入(编辑器编辑程序)
时,表示该数值是某种进制的。 -
后缀:一般用在
写出数据(纸面上写出)
时,表示该数值是某种进制的。 -
进制的后缀就是进制的英文名称的首字母的大小写。
-
不同的编译环境,会选择性的支持前缀或后缀,及可能会支持前后缀的转换。
-
Java 支持进制前缀方式,后缀方式是否支持暂不明确。
十进制(Decimal)
-
只有 0 ~ 9 十个值
,计算方法是逢十进一
。 -
日常生活和计算都是用十进制,比较好理解。
-
前缀:无。
-
后缀:d/D。
二进制(Binary)
-
只有 0 和 1 两个值
,计算方法是逢二进一
。 -
0B 表示 0D,1B 表示 1D,10B 表示 2D,110B 表示 6D。
-
进制如今主要应在电技术的数字电路中。如我们经常使的
计算机能够识别的语言就是二进制语言
。 -
前缀:0b/0B(数字 0 加上字母 b/B)。
-
后缀:b/B。
八进制(Octal)
-
只有 0 ~ 7 八个值
,计算方法是逢八进一
。 -
主要用来
存储数据
(与十六进制相比,较少使用)。 -
7O 表示 7D,10O 表示 8D,12O 表示 10D。
-
前缀:0(数字 0)。
-
后缀:o/O(字母 o/O)。
十六进制(Hexadecimal)
-
用数字 0-9 和字母 a-f(或其大写A-F)表示 0D 到 15D ,计算方法是
逢十六进一
。 -
只有 0 ~ 9 和 a ~ f 十六个值
。 -
a/A 表示 10D,b/B 表示 11D,c/C 表示 12D,d/D 表示 13D,e/E 表示 14D,f/F 表示 15D。
-
主要用来
存储数据
,表示处理器的寄存器、存储器的地址、数据
。 -
前缀:0x/0X(数字 0 加上字母 x/X)。
-
后缀:h/H。
Java 中的进制问题
输入
-
Java 中,数值的默认输入方式是
十进制
,没有前缀
。 -
添加了
0b/0B
前缀表示是二进制
数值输入。 -
添加了
0
前缀表示是八进制
数值输入。 -
添加了
0x/0X
前缀表示是十六进制
数值输入。 -
例子:(其中:
100D = 64H = 1100100B = 144O
)
public class text {
public static void main(String[] args) {
// 十进制输入
long l = 100;
// 十六进制输入
long l1 = 0X64;
// 二进制输入
long l2 = 0B1100100;
// 八进制输入
long l3 = 0144;
}
}
- 即:
十进制数 100 = 十六进制数 64 = 二进制数 1100100 = 八进制数 144
。
输出
-
Java 中所有的基本类型的包装器类(Long、Double 等)都封装了
进制(八、十六、二、十进制)转换
的方法。 -
System.out.println()
输出的是字符串
。 -
所有的数值在 Java 中展示(输入、输出)时,都
默认按照十进制形式
。 -
toBinaryString()
方法,将传入的数值(不需要是十进制)转换成二进制
形式的字符串。 -
toOctalString(x)
方法,将传入的数值(不需要是十进制)转换成八进制
形式的字符串。 -
toHexString(x)
方法,将传入的数值(不需要是十进制)转换成十六进制
形式的字符串。 -
默认以十进制输出
。 -
System.out.
println()
用于输出信息后追加一个空行
。 -
System.out.
printf()
用于对输出内容进行格式化操作
,可以添加 ‘\n’ 实现换行。-
具体的使用方法可以去看:System.out.printf()的使用方法
-
%
表示进行格式化输出。 -
%b` 表示 格式化输出
布尔类型(全小写,即 true),
%B` 表示 格式化输出布尔类型(全大写,即 TRUE)
。 -
%d、%x、%X、%o
表示 格式化输出进制数(八、十六、十进制)
。
-
-
System.out.printf() 的例子:
public class text {
public static void main(String[] args) {
System.out.printf("八进制输出:%o\n", l);
System.out.printf("十进制输出:%d\n", l);
System.out.printf("十六进制输出:%x\n", l);
System.out.printf("十六进制输出:%X\n", l);
}
}
最后,参考的测试代码
public class text8 {
public static void main(String[] args) {
System.out.println("============ long 类型的最大值输出测试 ==========");
long x = Long.MAX_VALUE;
String s = Long.toBinaryString(x);
System.out.println("二进制输出:" + s);
System.out.println("二进制 length:" + s.length());
String s1 = Long.toOctalString(x);
System.out.println("八进制输出:" + s1);
System.out.println("八进制 length:" + s1.length());
System.out.println("十进制输出:" + x);
String s2 = Long.toHexString(x);
System.out.println("十六进制输出:" + s2);
System.out.println("十六进制 length:" + s2.length());
System.out.println("\n\n");
System.out.println("============ long 类型的最小值输出测试 ==========");
long x1 = Long.MIN_VALUE;
String s3 = Long.toBinaryString(x1);
System.out.println("二进制输出:" + s3);
System.out.println("二进制 length:" + s3.length());
String s4 = Long.toOctalString(x1);
System.out.println("八进制输出:" + s4);
System.out.println("八进制 length:" + s4.length());
System.out.println("十进制输出:" + x1);
String s5 = Long.toHexString(x1);
System.out.println("十六进制输出:" + s5);
System.out.println("十六进制 length:" + s5.length());
System.out.println("\n\n");
System.out.println("============ long 类型的中间值输出测试 ==========");
long x2 = 1900L;
String s6 = Long.toBinaryString(x2);
System.out.println("二进制输出:" + s6);
System.out.println("二进制 length:" + s6.length());
String s7 = Long.toOctalString(x2);
System.out.println("八进制输出:" + s7);
System.out.println("八进制 length:" + s7.length());
System.out.println("十进制输出:" + x2);
String s8 = Long.toHexString(x2);
System.out.println("十六进制输出:" + s8);
System.out.println("十六进制 length:" + s8.length());
System.out.println("\n\n");
System.out.println("============ 十进制输入: ==========");
long l = 100;
System.out.println("二进制输出:" + Long.toBinaryString(l));
System.out.println("八进制输出:" + Long.toOctalString(l));
System.out.printf("八进制输出:%o\n", l);
System.out.println("十进制输出:" + l);
System.out.printf("十进制输出:%d\n", l);
System.out.println("十六进制输出:" + Long.toHexString(l));
System.out.printf("十六进制输出:%x\n", l);
System.out.printf("十六进制输出:%X\n", l);
System.out.println("\n\n");
System.out.println("============ 十六进制输入: ==========");
long l1 = 0X64;
System.out.println("二进制输出:" + Long.toBinaryString(l1));
System.out.println("八进制输出:" + Long.toOctalString(l1));
System.out.println("十进制输出:" + l1);
System.out.println("十六进制输出:" + Long.toHexString(l1));
System.out.println("\n\n");
System.out.println("============ 二进制输入: ==========");
long l2 = 0B1100100;
System.out.println("二进制输出:" + Long.toBinaryString(l2));
System.out.println("八进制输出:" + Long.toOctalString(l2));
System.out.println("十进制输出:" + l2);
System.out.println("十六进制输出:" + Long.toHexString(l2));
System.out.println("\n\n");
System.out.println("============ 八进制输入: ==========");
long l3 = 0144;
System.out.println("二进制输出:" + Long.toBinaryString(l3));
System.out.println("八进制输出:" + Long.toOctalString(l3));
System.out.println("十进制输出:" + l3);
System.out.println("十六进制输出:" + Long.toHexString(l3));
System.out.println("\n\n");
}
}
其他的总结
-
所有进制
在输出数值时,数值的高位没有表示数值时,默认不输出,只输出有效位
。 -
最高位为:0(二进制为例),表示为
正数,默认,不输出 + 号
。 -
最高位为:1(二进制为例),表示为
负数,输出 - 号
。 -
不建议用八进制输入数据
,可以用其他进制,因为八进制的前缀是:0(数字 0)。