- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是代码和结果:
python2.7 >>> 0xcafebabe
3405691582
scala2.10.4> 0xcafebabe
res0: Int = -889275714
为什么十六进制数 '0xcafebabe' 在 Scala 中是负数?
P.S.:我发现它与Int的溢出有关。但是当我指定一个变量为 Long 时,为什么它仍然不符合预期?
scala> val aa = 0xcafebabeL
aa: Long = 3405691582
scala> val aa1:Long = 0xcafebabe
aa1: Long = -889275714
附言2:当我尝试使用 3405691582 将变量评估为 Int 时,Scala 提示提示 error: integer number too large
,而如果应用 0xcafebabe,则不会抛出任何错误。这是为什么?
scala> val aa:Int = 3405691582
<console>:1: error: integer number too large
val aa:Int = 3405691582
^
scala> val aa:Int = 0xcafebabe
aa: Int = -889275714
最佳答案
Python 具有任意精度的整数,因此 int
的范围是无限的,类似于 BigInt
Scala 的,而在 Scala 中,不合格的整数文字映射到 Java 类型 int
. Java int
具有 32 位精度,范围为 -0x80000000 到 0x7FFFFFFF。
自 0xcafebabe
和 0xdeadbeef
设置了符号位,它们是负数,如int
Java 和其他 JVM 语言中的 s;它们被评估为 two's complement , 作为 -0x21523502
.这不是溢出问题,而是标准行为。在 JVM 中没有无符号值类型,int
用于可以根据需要设置、测试和取消设置所有 32 位的位域;对于这种情况,通常使用正十六进制常量来设置来自 0x00000000
的所有值。没有位设置为 0xFFFFFFFF
对于所有位集。
在 Scala 中,你可以有正数 0xcafebabe
如果你把它设为 Long
文字:试试 0xcafebabeL
.这将被理解为 3405691582L
斯卡拉。
在 JVM 中,溢出对于数学运算是明确定义的;计算总是根据二进制补码进行;您可以将此视为整数溢出的示例,但事实并非如此,因为编译器只考虑这个 0xcafebabe
与 -889275714
完全相同字面意思。
关于python - 为什么 '0xcafebabe' 在 Scala 和 Python 中代表不同的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513189/
我是一名优秀的程序员,十分优秀!