为什么08被认为是超出范围的int,而07及以下版本却不是呢?

评论

另请参见stackoverflow.com/questions/35521278/…

另请参见带前导零的整数

#1 楼

在Java和其他几种语言中,以0开头的整数文字被解释为八进制(以8为底)的数量。结果是相同的,因此您可能不会注意到它们被解释为八进制。但是,如果您写的数字的有效位数不止一个,那么结果可能会使您感到困惑。

例如:

010 ==  8
024 == 20

08开头整数,除非您实际上实际上是试图自己写零。

评论


另请注意,错误消息取决于底数:0b3-二进制-“二进制数必须包含至少一个二进制数” 09-八进制-“整数数太大:09” 0xG-十六进制-“十六进制数必须至少包含一个十六进制数字”

–提摩斯
13年8月6日在9:24



很高兴认识。有人可能会编写一个数组为myarray [010]的程序,以为它等同于myarray [10]并且飞机坠毁或其他原因。

–KovácsImre
13年11月29日在10:18

是的,但是如何在八进制中指定零? :)

–杰弗里·布拉特曼(Jeffrey Blattman)
16年7月28日在18:57

00是0的八进制。对于十进制,八进制,二进制,十六进制,您有0 == 00 == 0b0 == 0x0。正如@Stuart Cook所提到的,只要您只使用最不常见的一位数,它们就不会有所不同。

–扎布扎德
16年8月16日在13:57

#2 楼

前缀为0的任何数字均视为八进制。八进制数字只能使用数字0-7,就像十进制可以使用0-9一样,而二进制可以使用0-1。

// octal to decimal
01  // 1
02  // 2
07  // 7
010 // 8
020 // 16

// octal to binary (excluding most significant bit)
01  // 1 
02  // 10
07  // 111
010 // 1000 
020 // 10000
10种人,懂三元的人,不懂三元的人,以及认为这是一个愚蠢的玩笑的人。


评论


我不得不在reddit上搜索很多不好的基础笑话,但是终于知道我属于第十组,那些人认为这是一个愚蠢的笑话。 :)

– CorayThan
16-10-15在6:43

#3 楼

根据Java规范,


八进制数字由一个ASCII数字0和一个或多个ASCII数字0至7组成,可以表示一个正数,零个或负整数。


#4 楼

前导零表示该值以八进制表示。 8不是八进制数字,以二进制表示的有效位数不超过2,以十六进制表示的有效位数不超过2。

#5 楼

在Java中,如果您定义的前导数字为'0'的整数表示您正在以八进制形式定义数字。

int a = 08给出了超出范围的错误,因为没有任何数字' 8英尺八分。八进制仅提供0-7个数字。

如果定义a = 07,则它不会超出范围,因为数字'0'和'7'在八进制的范围内。

#6 楼

在大多数编程语言(如JavaC/C++)中,前导零的数字被解释为八进制数。众所周知,八进制数仅在07的数字内表示。因此,像0503054这样的数字是有效的,但是像07803480908这样的数字往往是无效的。