2

为什么这个java程序的输出是89当我们分别尝试打印010和时011

public class Test{
   public static void main(String str[]){ 
      System.out.println(011); 
   }
}

是什么原因?

4

4 回答 4

6

01010八进制基数的解释,即8. 同样01111in octal basewhich is的解释9

在前面integer加上 with0使其在octal base.

同样,您可以尝试打印0x10,它是一种hexadecimal表示形式,并将给您16作为输出。

于 2012-11-18T17:19:22.233 回答
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

PS从您的问题中不清楚确切的问题是什么。听起来您正在从整数值转换为字符串。但是,如果问题是您尝试读取字符串“011”并且它被读取为整数值 9,这是因为前导 0 强制解释为八进制值。您必须将其作为字符串值读取,然后显式指定从字符串到整数的转换以 10 为底:

int val = Integer.valueOf(stringValue, 10);
于 2012-11-18T17:19:30.097 回答
1

-如果要将整数转换为二进制数据,请使用toBinaryString()方法。

例如:

int i = 8;
Integer.toBinaryString(i);
于 2012-11-18T17:23:03.353 回答
0

贝克。当您以 0 开头的数字时,JVM 将数字从十进制转换为八进制,仅此而已;)
“十进制的 11 = 八进制的 9”十进制 0 1 2 3 4 5 6 7 8 9 八进制 0 1 2 3 4 5 6 7 10 11

于 2017-09-11T05:40:13.767 回答