我想了解“有符号整数”和“算术左移”在swift和iOS中的工作原理。有符号整数,算术左移
在这本书中,迅速的编程语言3.0,它说
我试过了,用下面的代码:
我有符号整数了解,二进制表示-120是10001000,所以将一个地方移到左边将导致00010000,这等于16(如代码所示)。但是16不是-120的两倍
这本书所作的陈述是不正确的,对吧?或者有什么我失踪?
我想了解“有符号整数”和“算术左移”在swift和iOS中的工作原理。有符号整数,算术左移
在这本书中,迅速的编程语言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)
这一切都取决于你正在使用什么类型的整数。尝试将'negative120'更改为Swift Integer而不是'Int8',就像'let negative120:Int = -120'一样,你会注意到这个值增加了一倍。 – Pierce