Why doesn't Kotlin support unsigned integers?

starbeamrainbowlabs picture starbeamrainbowlabs · May 7, 2018 · Viewed 8.8k times · Source

I came across a situation just recently in which an unsigned integer would have been really useful (e.g. any negative value would not make sense etc.). Surprisingly, I discovered that Kotlin does not support unsigned integers - and there doesn't appear to be anything else out there about why (even though I've looked).

Am I missing something?

Answer

Willi Mentzel picture Willi Mentzel · Dec 7, 2018

Unsigned counterparts of Byte, Short, Int and Long do exist in Beta since Kotlin 1.3 and are stable as of Kotlin 1.5:

From the docs:

kotlin.UByte: an unsigned 8-bit integer, ranges from 0 to 255
kotlin.UShort: an unsigned 16-bit integer, ranges from 0 to 65535
kotlin.UInt: an unsigned 32-bit integer, ranges from 0 to 2^32 - 1
kotlin.ULong: an unsigned 64-bit integer, ranges from 0 to 2^64 - 1

Usage

// 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()