2016-07-04 60 views
8

如何在Kotlin中編寫一個等於Int.MIN_VALUE(十進制的-2147483648)的十六進制整數文字?在Kotlin中寫入一個等於Int.MIN_VALUE的十六進制整數文字

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即十進制數
  • 0x0FFFFFFF 268435455這也是268435455十進制

但我不能找出十六進制整數字面可以用來表示Int.MIN_VALUE

我希望答案並不讓我覺得愚蠢...

回答

9

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溢出行爲。

進一步閱讀:

+0

[科特林規格](http://jetbrains.github.io/kotlin-spec/#_hexadecimal_literals) – pcmind

相關問題