Types 为什么';t Kotlin是否支持无符号整数?

Types 为什么';t Kotlin是否支持无符号整数?,types,kotlin,language-design,unsigned-integer,Types,Kotlin,Language Design,Unsigned Integer,我最近遇到了一种情况,在这种情况下,一个无符号整数将非常有用(例如,任何负值都没有意义等等)。令人惊讶的是,我发现Kotlin不支持无符号整数——而且似乎没有其他原因(尽管我已经看过) 我遗漏了什么吗?为什么Kotlin没有本机无符号类型 这是因为正如问题所示,Java并没有内置的无符号类型 在JVM上使用时,Kotlin编译为Java字节码,因此Java上的此限制也适用于Kotlin 权变措施 您可以使用Integer和Long的实用方法对值进行无符号操作,但这仍然会在内部将值存储为有符号 您

我最近遇到了一种情况,在这种情况下,一个无符号整数将非常有用(例如,任何负值都没有意义等等)。令人惊讶的是,我发现Kotlin不支持无符号整数——而且似乎没有其他原因(尽管我已经看过)

我遗漏了什么吗?

为什么Kotlin没有本机无符号类型 这是因为正如问题所示,Java并没有内置的无符号类型

在JVM上使用时,Kotlin编译为Java字节码,因此Java上的此限制也适用于Kotlin

权变措施 您可以使用Integer和Long的实用方法对值进行无符号操作,但这仍然会在内部将值存储为有符号


您还可以编写一个实用程序类,该类保存一个值,其行为类似于无符号int类型,但这可能比使用上述方法慢。

从Kotlin 1.3开始,无符号类型可用,并且基于内联类功能


请参阅1.3-M1版本的“无符号整数类型”部分:

自Kotlin 1.3以来,
字节
Int
的无符号副本确实存在于Beta版中,它们是:

从:

kotlin.UByte
:一个无符号8位整数,范围从0到255
kotlin.UShort
:一个无符号16位整数,范围从0到65535
kotlin.UInt
:一个无符号32位整数,范围从0到2^32-1
kotlin.ULong
:一个无符号64位整数,范围从0到2^64-1

用法


@nhaarman Java答案与Kotlin问题的关系如何?@starbeamRainbowllabs你刚才说了我认为你说的话吗?@Vivick如果你指的是我不完全理解Java和Kotlin的关系,那么是的。Kotlin被转译为Java,这就是为什么没有对无符号整数的“真正”支持。您仍然可以使用
未签名的
类进行黑客攻击,但会遇到一些问题。@Vivick,Kotlin未转换为Java源代码。它被转换为JVM(Java虚拟机)字节码。不要误导人们。我不明白为什么JVM会规定这些功能。如果您可以编写代码来模拟无符号,那么字节码也可以这样做。你是说代码效率低下,所以设计者觉得不值得支持吗?这并不意味着这是不可能的。这可能意味着这不值得。
// 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()