Eri*_*ric 10 hex integer kotlin
如何在Kotlin中写一个等于Int.MIN_VALUE
(-2147483648
十进制)的十六进制整数文字?
AFAIK,一个Int是4个字节......有时似乎2的补码用于表示整数...但我不确定.我尝试了以下十六进制文字来帮助自己理解系统:
0xFFFFFFFF
但这是一个Long
,而不是一个Int
0xFFFFFFFF.toInt()
这是-1-0xFFFFFFFF.toInt()
这是10x7FFFFFFF
这是2147483647 Int.MAX_VALUE
-0x7FFFFFFF
这是-2147483647 Int.MIN_VALUE+1
0xFFFFFFF
这是小数的2684354550x0FFFFFFF
这也是十进制的268435455但我无法弄清楚可以用什么十六进制整数文字来表示Int.MIN_VALUE
.
我希望答案不会让我感到愚蠢......
mie*_*sol 11
Int
表示32位有符号整数.32位表示8个十六进制数字:
___7 F F F F F F F
0111 1111 1111 1111 1111 1111 1111 1111
如您所见,最左侧的位为0,因此这是32位表示中的正整数.通过2的补码定义和示例,最小的32位负值将1
在最左边的位后面跟着0
:
1000 0000 0000 0000 0000 0000 0000 0000
___8 0 0 0 0 0 0 0
就是这样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)
Run Code Online (Sandbox Code Playgroud)
它与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)
Run Code Online (Sandbox Code Playgroud)
这与Kotlin规范一致,尽管十六进制文字的溢出行为尚未定义.
进一步阅读:
归档时间: |
|
查看次数: |
3913 次 |
最近记录: |