为什么这个java程序的输出是8
和9
当我们分别尝试打印010
和时011
:
public class Test{
public static void main(String str[]){
System.out.println(011);
}
}
是什么原因?
为什么这个java程序的输出是8
和9
当我们分别尝试打印010
和时011
:
public class Test{
public static void main(String str[]){
System.out.println(011);
}
}
是什么原因?
010
是10
八进制基数的解释,即8
. 同样011
是11
in octal base
which is的解释9
。
在前面integer
加上 with0
使其在octal base
.
同样,您可以尝试打印0x10
,它是一种hexadecimal
表示形式,并将给您16
作为输出。
在 Java 中,从整数到字符串的默认转换是以 10 为基数的。如果您想要不同的基数,则必须明确指定它。例如,您可以使用以下方法将整数值转换为二进制字符串:
Integer.toString(value, 2);
同样,您可以使用以下方法将其转换为八进制值:
Integer.toString(value, 8);
除非该值为 0,否则字符串不会有前导零。如果你想要一个前导 0,你必须在前面加上它。或者,您可以将其格式化String.format()
并指定零填充和转换后的字符串的最小宽度:
String.format("%1$03o", value); // the "1$ in the format string is optional here
PS从您的问题中不清楚确切的问题是什么。听起来您正在从整数值转换为字符串。但是,如果问题是您尝试读取字符串“011”并且它被读取为整数值 9,这是因为前导 0 强制解释为八进制值。您必须将其作为字符串值读取,然后显式指定从字符串到整数的转换以 10 为底:
int val = Integer.valueOf(stringValue, 10);
-如果要将整数转换为二进制数据,请使用toBinaryString()
方法。
例如:
int i = 8;
Integer.toBinaryString(i);
贝克。当您以 0 开头的数字时,JVM 将数字从十进制转换为八进制,仅此而已;)
“十进制的 11 = 八进制的 9”十进制 0 1 2 3 4 5 6 7 8 9 八进制 0 1 2 3 4 5 6 7 10 11