swift中的按位和算术运算

时间:2016-09-16 17:03:40

标签: swift bitwise-operators swift3

老实说,移植到swift3(来自obj-c)很难。最简单但最迅速的问题。

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

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

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

有什么问题?

PS。太可惜了;)

2 个答案:

答案 0 :(得分:4)

a返回readByte所以:

  1. 你不能将UInt8左移8位,你将失去所有的位。
  2. 表达式的类型为UInt8,无法满足计算的UInt8值。
  3. 表达式的类型为Int16,它不是带注释的返回类型UInt8
  4. d

    Int16

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

    OR运算符也更具自我文档和语义。

答案 1 :(得分:0)