有符号整数,向左移动算术

时间:2017-02-09 02:54:03

标签: ios swift integer byte bit

我试图理解"签名整数"和"算术左移"适用于swift和iOS。

在书中,swift编程语言3.0,它说

enter image description here

我用以下代码尝试了它:

enter image description here

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

这本书的陈述不正确,对吗?或者有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

您遇到整数溢出。只要所有位都有空间,双倍效应才有效。

如果您使用Int16Int32Int64Int(映射到Int32Int64,此示例将有效,取决于系统)。考虑Int16

的情况

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

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