gpt4 book ai didi

scala - 十六进制文字、编译器错误或写得不好的规范?

转载 作者:行者123 更新时间:2023-12-05 00:35:41 24 4
gpt4 key购买 nike

Scala 规范说

1.3.1 Integer Literals

Syntax:

integerLiteral ::= (decimalNumeral | hexNumeral | octalNumeral) [‘L’ | ‘l’]
decimalNumeral ::= ‘0’ | nonZeroDigit {digit}
hexNumeral ::= ‘0’ ‘x’ hexDigit {hexDigit}
octalNumeral ::= ‘0’ octalDigit {octalDigit}
digit ::= ‘0’ | nonZeroDigit
nonZeroDigit ::= ‘1’ | · · · | ‘9’
octalDigit ::= ‘0’ | · · · | ‘7’

Integer literals are usually of type Int, or of type Long when followed by a L or l suffix. Values of type Int are all integer numbers between -231 and 231-1, inclusive. Values of type Long are all integer numbers between -263 and 263-1, inclusive. A compile-time error occurs if an integer literal denotes a number outside these ranges



上次查 0x80000000等于 2147483648,它应该超出 Int 的范围(“在 -231 和 231-1 之间,包括”)。

编译器仍然没有提示,而是让整数溢出到 -2147483648。

那么,是规范错误,编译器错误,还是我误解了什么?

编辑:以十进制形式写入的相同数字被正确处理并产生错误。

最佳答案

有符号整数中的最高有效位用于表示符号,而不是 2 的高次幂 - 因此设置了此位的任何内容都将表示负数,而不是正数。 two's complement使用形式,这意味着 0x8000000 确实等于 -2147483648。

对于您的编辑:出于同样的原因,相同的十进制数字是 -2147483638,而不是 +2147483638。

关于scala - 十六进制文字、编译器错误或写得不好的规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com