gpt4 book ai didi

integer - 在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字

转载 作者:IT老高 更新时间:2023-10-28 13:35:56 27 4
gpt4 key购买 nike

如何在 Kotlin 中编写一个等于 Int.MIN_VALUE(十进制为 -2147483648)的十六进制整数文字?

AFAIK,一个 Int 是 4 个字节...有时它看起来像 2's 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表示一个 32 位有符号整数。 32 位表示 8 个十六进制数字:

___7 F F F F F F F

0111 1111 1111 1111 1111 1111 1111 1111

如您所见,最左边的位是 0,因此这是 32 位表示中的正整数。作者 2's complement定义和示例 最小的 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)

这和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 spec虽然 hexadecimal literals is yet to be defined 的溢出行为.

进一步阅读:

关于integer - 在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175798/

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