我试图理解"签名整数"和"算术左移"适用于swift和iOS。
在书中,swift编程语言3.0,它说
我用以下代码尝试了它:
我理解有符号整数,-120的二进制表示是10001000,因此向左移动一个位置将导致00010000,其等于16(如代码所示)。但16不是-120的两倍
这本书的陈述不正确,对吗?或者有什么我想念的吗?答案 0 :(得分:2)
您遇到整数溢出。只要所有位都有空间,双倍效应才有效。
如果您使用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)