2017-02-09 73 views
0

我想了解「有符號整數」和「算術左移」在swift和iOS中的工作原理。有符號整數,算術左移

在這本書中,迅速的編程語言3.0,它說

enter image description here

我試過了,用下面的代碼:

enter image description here

我有符號整數了解,二進制表示-120是10001000,所以將一個地方移到左邊將導致00010000,這等於16(如代碼所示)。但是16不是-120的兩倍

這本書所作的陳述是不正確的,對吧?或者有什麼我失蹤?

+2

這一切都取決於你正在使用什麼類型的整數。嘗試將'negative120'更改爲Swift Integer而不是'Int8',就像'let negative120:Int = -120'一樣,你會注意到這個值增加了一倍。 – Pierce

回答

2

您遇到整數溢出。只要所有位都有空間,倍增效果就會起作用。如果你使用Int16Int32Int64Int(映射要麼Int32Int64,取決於系統)

這個例子會工作。考慮Int16的情況。

-120的二進制表示爲Int161111 1111 1000 1000。左移一位,我們得到:1111 1111 0001 0000。這是您所期望的-240的二進制表示形式。下面是它的代碼:

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

非常感謝您澄清這個概念。你能告訴我如何處理整數溢出時,我正在處理位?大多數時候,一切都很完美,但偶爾有一些邊緣案例的結果不符合我們的預期。再次感謝你的幫助! – Thor

+0

@TonyStark嗯,這取決於。你究竟想達到什麼目的? – Alexander

+0

我想我正在問一個非常普遍的問題。我沒有特別的目的。只是想知道如何處理整體溢出,當我遇到他們我猜。抱歉不能更具體 – Thor