2017-02-09 16 views
0

「符号付き整数」と「算術左シフト」が迅速かつiOSでどのように機能するかを理解しようとしています。 、私は符号付き整数と理解符号付き整数、左への算術シフト

enter image description here

バイナリ表現を:ブック、迅速なプログラミング言語3.0では

、それは私が次のコードでそれを試してみた

enter image description here

を語ります-120の値が10001000であるため、1つの場所を左にシフトすると00010000となり、コードに示すように16になります。しかし、16は-120の倍数ではありません

本の記述は間違っていますか?私は行方不明の何かがありますか?

+2

これは、使用している整数のタイプに依存します。 'let120 :: Int = -120'のように' negative120'を 'Int8'の代わりにSwift Integerに変更してみてください。値が倍になることに気付くでしょう。 – Pierce

答えて

2

整数オーバーフローが発生しています。倍増効果は、すべてのビットに余裕がある限り、機能します。あなたは(システムによっては、Int32またはInt64のいずれかにマップ)Int16Int32Int64またはIntを使用している場合

この例では動作します。 Int16の場合を考えてみましょう。

-120Int16のバイナリ表現は、1111 1111 1000 1000です。左に1つシフトすると、1111 1111 0001 0000が得られます。これは、期待通りに-240のバイナリ表現です。

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

このコンセプトを明確にしていただきありがとうございます。ビットで作業しているとき整数オーバーフローを処理する方法を教えてください。ほとんどの場合、すべてが完璧に機能しますが、結果が期待通りではない場合があります。あなたの助けをもう一度ありがとう! – Thor

+0

@トニースタールそれはまあそれに依存します。あなたは正確に何を達成しようとしていますか? – Alexander

+0

私は非常に一般的な質問をしていると思います。私は特別な目的を念頭に置いていません。私が推測するように遭遇したとき、一般的に整数のオーバーフローを処理する方法を知りたいだけです。申し訳ありませんより具体的にはできません – Thor

関連する問題