gpt4 book ai didi

arrays - Swift Array[UInt8] 使用按位运算符不起作用?

转载 作者:行者123 更新时间:2023-11-28 09:44:28 26 4
gpt4 key购买 nike

我在 playground 上测试我的代码时感到困惑

var test: [UInt8] = [5, 6, 7, 8]

print(test[0]) -> 5

print(5<<8) -> 1280

print(test[0]<<8) -> error

错误结果如上

谁能解释一下?

最佳答案

当使用按位移位运算符时,您必须移动小于要移动的值的类型大小(以位为单位)。在这种情况下,您正在尝试转移 UInt8 8 位 - 这超出了该范围。

它为 print(5<<8) -> 1280 工作的原因是因为 Swift 将这些类型推断为 Int – 因此它将是 32 位或 64 位,具体取决于平台。因为 8 小于此,所以它会起作用。

如果您显式转换 5UInt8 ,你会得到一个编译器错误提示:

Shift amount is greater than or equal to type size in bits

但是,Swift 似乎无法为数组提供相同的编译器错误——只能提供运行时错误。

因此,解决方案是使用更大的类型。根据您使用此代码的目的,您可能需要使用 UInt16数组。

var test: [UInt16] = [5, 6, 7, 8]

或者,如果您独立于数组使用移位后的值,则可以在移位前将它们转换为更大的类型:

print(UInt16(test[0])<<8)

虽然你应该注意到 Apple recommends you use Int 对于整数类型,即使已知您的值是非负的——除非您特别需要使用固定大小的类型。

关于arrays - Swift Array[UInt8] 使用按位运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com