ios - 有符号整数,算术左移

标签 ios swift integer byte bit

我试图了解“有符号整数”和“算术左移”在 swift 和 iOS 中的工作原理。

在书中,swift programming language 3.0,是这样写的

enter image description here

我用下面的代码试了一下:

enter image description here

我理解有符号整数,-120 的二进制表示为 10001000,因此向左移动一位将导致 00010000,等于 16(如代码所示)。但是 16 不是 -120 的两倍

书上的说法不对吧?还是我遗漏了什么?

最佳答案

您遇到整数溢出。加倍效应只有在所有位都有空间时才会起作用。

如果您使用 Int16Int32Int64Int(映射到Int32Int64,具体取决于系统)。考虑 Int16 的情况。

-120 作为 Int16 的二进制表示是 1111 1111 1000 1000。左移一位,我们得到:1111 1111 0001 0000。正如您所期望的,这是 -240 的二进制表示。这是它的代码:

let a: Int16 = -120
print(a << 1)

关于ios - 有符号整数,算术左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127426/

相关文章:

ios - 将数据从子 Controller 传递回父 Controller

ios - 模态转场后看不到源 View Controller

ios - UITableView + 可触摸的UIView/UIScrollView behin

ios - 从字符串中获取 NSDate 对象

swift - 在根任务中抛出错误

perl - 在 Perl 中处理非常大的数字时,如何禁用科学记数法?

java - 如何根据数据库中的数字制作 "int"? - java

c++ - 归一化整数到/从 float 转换

iphone - 在大数组中搜索字符串需要很长时间

ios - 应用程序关闭时后台传输下载任务失败