如何编写等于的十六进制整数文字Int.MIN_VALUE
(这是-2147483648
十进制)在 Kotlin 中?
AFAIK,一个 Int 是 4 个字节......有时看起来像2的补码 https://en.wikipedia.org/wiki/Two%27s_complement用于表示整数...但我不确定。我尝试了以下十六进制文字来帮助自己理解系统:
-
0xFFFFFFFF
但这是一个Long
,不是一个Int
-
0xFFFFFFFF.toInt()
这是-1
-
-0xFFFFFFFF.toInt()
这是 1
-
0x7FFFFFFF
这是 2147483647 这是Int.MAX_VALUE
-
-0x7FFFFFFF
这是 -2147483647 这是Int.MIN_VALUE+1
-
0xFFFFFFF
十进制为 268435455
-
0x0FFFFFFF
十进制也是 268435455
但我不知道可以用什么十六进制整数文字来表示Int.MIN_VALUE
.
希望我的回答不会让我觉得自己很愚蠢……
Int https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/表示 32 位有符号整数。 32 位表示 8 个十六进制数字:
___7 F F F F F F F
0111 1111 1111 1111 1111 1111 1111 1111
正如您所看到的,最左边的位是 0,因此这是 32 位表示中的正积分。经过2的补码 https://en.wikipedia.org/wiki/Two%27s_complement最小 32 位负值的定义和示例1
在最左边的位,然后是0
:
1000 0000 0000 0000 0000 0000 0000 0000
___8 0 0 0 0 0 0 0
that is 0x80000000
.
在 Kotlin 中你需要预先添加-
表示负数的符号Int
这在 Java 中是不正确的。考虑下面的例子
println(0x7FFFFFFF) // -> prints 2147483647 (Integer.MAX_VALUE)
println(-0x80000000) // -> prints -2147483648 (Integer.MIN_VALUE)
println(0x80000000) // -> prints 2147483648 (does not fit into Int)
它与 Java 中的不一样:
System.out.println(0x7FFFFFFF); // -> prints 2147483647 (Integer.MAX_VALUE)
System.out.println(-0x80000000); // -> prints -2147483648 (Integer.MIN_VALUE)
System.out.println(0x80000000); // -> prints -2147483648 (Integer.MIN_VALUE)
这符合Kotlin 规范 https://github.com/Kotlin/kotlin-spec/blob/release/docs/src/md/kotlin.core/expressions.md#decimal-integer-literals虽然溢出行为十六进制文字尚未定义 https://github.com/Kotlin/kotlin-spec/blob/release/docs/src/md/kotlin.core/expressions.md#hexadecimal-integer-literals.
进一步阅读:
- 为什么Java能够将0xff000000存储为int? https://stackoverflow.com/questions/319199/why-is-java-able-to-store-0xff000000-as-an-int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)