Search code examples
typeskotlinlanguage-designunsigned-integer

Why doesn't Kotlin support unsigned integers?


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?


Solution

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