gpt4 book ai didi

swift - swift 中的按位和算术运算

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:15 26 4
gpt4 key购买 nike

老实说,移植到 swift3(从 obj-c)很困难。最简单但最快的问题。

public func readByte() -> UInt8
{
// ...
}

public func readShortInteger() -> Int16
{
return (self.readByte() << 8) + self.readByte();
}

从编译器获取错误消息:“二元运算符 + 不能应用于两个 UInt8 操作数。”

怎么了?

附言。真可惜 ;)

最佳答案

readByte 返回一个 UInt8 所以:

  1. 您不能将 UInt8 左移 8 位,您将丢失它的所有位。
  2. 表达式的类型是 UInt8,不适合它正在计算的 Int16 值。
  3. 表达式的类型是 UInt8,它不是带注释的返回类型 Int16

d

func readShortInteger() -> Int16
{
let highByte = self.readByte()
let lowByte = self.readByte()

return Int16(highByte) << 8 | Int16(lowByte)
}

虽然 Swift 对操作数有严格的左右评估顺序,但我重构了代码以明确首先读取哪个字节,然后读取哪个字节。

此外,OR 运算符更具自记录性和语义性。

关于swift - swift 中的按位和算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536734/

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