我想了解「有符號整數」和「算術左移」在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