08
被认为是超出范围的int,而07
及以下版本却不是呢?#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 楼
在大多数编程语言(如Java
和C/C++
)中,前导零的数字被解释为八进制数。众所周知,八进制数仅在0
至7
的数字内表示。因此,像05
,03
,054
这样的数字是有效的,但是像078
,0348
,09
和08
这样的数字往往是无效的。
评论
另请参见stackoverflow.com/questions/35521278/…另请参见带前导零的整数