首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位运算和运算在Bitwise中

位运算和运算在Bitwise中
EN

Stack Overflow用户
提问于 2016-09-16 17:03:40
回答 2查看 808关注 0票数 1

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

代码语言:javascript
复制
public func readByte() -> UInt8
{
    // ...
}

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

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

怎么啦?

ps。(真可惜;)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 17:23:32

readByte返回一个UInt8,因此:

  1. 你不能移动一个8位的UInt8,你就会失去它的所有比特。
  2. 表达式的类型是UInt8,它不能满足它正在计算的Int16值。
  3. 表达式的类型是UInt8,它不是带注释的返回类型Int16

D

代码语言:javascript
复制
func readShortInteger() -> Int16
{
    let highByte = self.readByte()
    let lowByte = self.readByte()

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

虽然Swift对操作数有严格的左-右求值顺序,但我重构了代码,使其明确显示先读取哪个字节,读取哪个字节。

此外,OR运算符更具有自文档化和语义性。

票数 4
EN

Stack Overflow用户

发布于 2017-08-09 15:26:24

苹果在这方面有一些很棒的Swift文档,如下所示:

Language/AdvancedOperators.html

代码语言:javascript
复制
let shiftBits: UInt8 = 4   // 00000100 in binary
shiftBits << 1             // 00001000
shiftBits << 2             // 00010000
shiftBits << 5             // 10000000
shiftBits << 6             // 00000000
shiftBits >> 2             // 00000001
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39536734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档