web-dev-qa-db-ja.com

Kotlinが符号なし整数をサポートしないのはなぜですか?

私は最近、符号なし整数が本当に役立つ状況に出くわしました(たとえば、負の値は意味をなさないなど)。驚いたことに、Kotlinが符号なし整数をサポートしていないことを発見しました-そして、その理由については他に何もありません(私が調べたとしても)。

何か不足していますか?

11

Kotlinにネイティブの符号なし型がないのはなぜですか

これは、 this の質問が示すように、Javaには組み込みの符号なし型がありません。

JVMで使用すると、KotlinはJavaバイトコードにコンパイルされるため、この制限はJavaもKotlinに適用されます。

回避策

IntegerおよびLongのユーティリティメソッドを使用して、値を符号なし link として操作できますが、これは値を内部的に符号付きとして保存します。

値を保持し、unsigned int型のように動作するユーティリティクラスを作成することもできますが、これは上記の方法を使用するよりも時間がかかる場合があります。

6
jrtapsell

glidor が正しく言及されているように、ByteShortInt、およびLongの符号なしの対応物は、Kotlin 1.3しかし、それらはまだなので注意してください experimental

docs から:

kotlin.UByte:0〜255の範囲の符号なし8ビット整数
kotlin.UShort:符号なし16ビット整数、範囲は0〜65535
kotlin.UInt:符号なし32ビット整数、範囲は0〜2 ^ 32-1
kotlin.ULong:符号なし64ビット整数、範囲は0〜2 ^ 64-1

使用法

// You can define unsigned types using literal suffixes
val uint = 42u 

// You can convert signed types to unsigned and vice versa via stdlib extensions:
val int = uint.toInt()
val uint = int.toUInt()
5
Willi Mentzel

Kotlin 1.3からは、インラインクラス機能に基づいた無署名のタイプが利用可能です。

1.3-M1リリースの「符号なし整数型」セクションを参照してください: https://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/

2
gildor