Eri*_*ric 10 hex integer kotlin
如何在Kotlin中写一个等于Int.MIN_VALUE(-2147483648十进制)的十六进制整数文字?
AFAIK,一个Int是4个字节......有时似乎2的补码用于表示整数...但我不确定.我尝试了以下十六进制文字来帮助自己理解系统:
0xFFFFFFFF但这是一个Long,而不是一个Int0xFFFFFFFF.toInt() 这是-1-0xFFFFFFFF.toInt() 这是10x7FFFFFFF 这是2147483647 Int.MAX_VALUE-0x7FFFFFFF 这是-2147483647 Int.MIN_VALUE+10xFFFFFFF 这是小数的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 次 |
| 最近记录: |