为什么在我们尝试分别打印8
和9
时,此java程序的输出为010
和011
:
public class Test{
public static void main(String str[]){
System.out.println(011);
}
}
是什么原因?
答案 0 :(得分:6)
010
是八进制基数10
的解释,8
。类似地011
解释11
octal base
9
中的integer
。
在0
之前添加octal base
,会在0x10
中进行解释。
同样,您可以尝试打印hexadecimal
,这是16
表示,并会将{{1}}作为输出。
答案 1 :(得分:6)
在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
P.S。从你的问题不清楚确切的问题是什么。听起来你正在从一个整数值转换为一个字符串。但是,如果问题是您正在尝试读取字符串“011”并且它被读取为整数值9,这是因为前导0强制解释为八进制值。您必须将其作为String值读取,然后显式指定从字符串到整数的转换为基数10:
int val = Integer.valueOf(stringValue, 10);
答案 2 :(得分:1)
- 如果要将整数转换为二进制数据,请使用toBinaryString()
方法。
<强>例如强>
int i = 8;
Integer.toBinaryString(i);
答案 3 :(得分:0)
BEC。当你用0开始你的数字时,JVM将数字从十进制转换为八进制,这就是全部;)
“十进制11 =八进制9”
十进制0 1 2 3 4 5 6 7 8 9
八进制0 1 2 3 4 5 6 7 10 11