我试图了解“有符号整数”和“算术左移”在 swift 和 iOS 中的工作原理。
在书中,swift programming language 3.0,是这样写的
我用下面的代码试了一下:
我理解有符号整数,-120 的二进制表示为 10001000,因此向左移动一位将导致 00010000,等于 16(如代码所示)。但是 16 不是 -120 的两倍
书上的说法不对吧?还是我遗漏了什么?
最佳答案
您遇到整数溢出。加倍效应只有在所有位都有空间时才会起作用。
如果您使用 Int16
、Int32
、Int64
或 Int
(映射到Int32
或 Int64
,具体取决于系统)。考虑 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/