前面为零的整数是啥意思,如何打印?

Posted

技术标签:

【中文标题】前面为零的整数是啥意思,如何打印?【英文标题】:What does an integer that has zero in front of it mean and how can I print it?前面为零的整数是什么意思,如何打印? 【发布时间】:2016-06-01 23:15:26 【问题描述】:
class test
  public static void main(String args[])
     int a = 011;
     System.out.println(a);
  

为什么我得到的是9 而不是011

我怎样才能得到011 作为输出?

【问题讨论】:

String.format("%02d", a) 011 是以 8 为底的文字,因此以 10 为底,您得到 9=(8^1+8^0)。更多详情见***.com/a/7218803/5166645 以 0 开头的数字称为十六进制数字。 @SmashCode 不完全正确。在 Java 中以“0”开头的数字称为 octal,以 8 为基数(octa- 是 8 的希腊前缀)。以“0x”开头的数字称为 hexadecimal(简称 hex),以 16 为基数(hexa- 是 6 的希腊前缀,而 deci- 是 10 的拉丁前缀)。常规数字被称为十进制,因为它们是以 10 为底的。八进制和十六进制很有用,因为它们比十进制更容易转换为二进制。 【参考方案1】:

JLS 3.10.1 描述了 4 种定义整数的方法。

整数字面量可以用 decimal(基数 10)、hexadecimal(基数 16)、octal(基数 8)或二进制(以 2 为底)。

八进制数由一个数字 0 后跟一个或多个数字 0 到 7 ...

组成

十进制数字可以是单个数字 0,表示整数 0,也可以由 1 到 9 的数字组成,可选地后跟 0 到 9 的一个或多个数字 ...

总而言之,如果您的整数文字(即011)以 0 开头,那么 java 将假定它是 octal notation。

解决方案:

如果您希望您的整数保持值 11,那么不要花哨,只需分配 11。毕竟,符号不会改变任何值。我的意思是,从数学的角度来看 11 = 011 = 11,0。

int a = 11;

格式仅在您打印时(或将 int 转换为 String)时才重要。

String with3digits = String.format("%03d", a);
System.out.println(with3digits);

格式化程序"%03d" 用于添加前导零。

或者,您可以使用 printf 方法在 1 行中完成。

System.out.printf("%03d", a);

【讨论】:

【参考方案2】:

以 0 开头的数字文字被解析为八进制数(即基数 8)。 011 是八进制的 9。

【讨论】:

【参考方案3】:

011 被解释为八进制数。这意味着它以 8 为基数。另请参阅 this SO post。来自 Stuart Cook 接受的答案:

在 Java 和其他几种语言中,以 0 开头的整数文字被解释为八进制(以 8 为基数)数量。

Base 10 中的数字: 100 秒、10 秒、1 秒

Base 8 中的数字: 64s、8s、1s

所以011 被解释为 8+1=9

【讨论】:

以上是关于前面为零的整数是啥意思,如何打印?的主要内容,如果未能解决你的问题,请参考以下文章

整数分为几大类,分别是啥?

无论结果如何,支持除以零的最快整数除法是啥?

Leetcode刷题100天—1304. 和为零的N个唯一整数(数学)—day47

Leetcode刷题100天—1304. 和为零的N个唯一整数(数学)—day47

如何打印带有前导零的二进制整数?

坐标小数点前面是啥单位