我正在用Java編寫左移算法,並且一直在做一些左移計算。所有這些數字鍵入爲字節,順便說一句。Java中的按位左移產生相同的值...?
比方說,我與8位整數的工作從-128到127
從我的計算然後:
(-113 << 4) == (-65 << 4) == -16
因爲
-113 == 1 0 0 0 1 1 1 1
-113 << 4 == 1 1 1 1 0 0 0 0 == -16
但這樣做
-65 == 1 0 1 1 1 1 1 1
-65 << 4 == 1 1 1 1 0 0 0 0 == -16
那麼左將-113移動4並向左移動-65將導致相同的值?不是所有的左移操作都能產生獨特的值嗎?或者我有這個權利嗎?
編輯:
我在Java中工作,我所有的數字是字節,而JVM拋出一個「錯誤:精度誤差的損失」,這是什麼也沉澱我的問題。 謝謝!
問題不明確。你想弄清楚什麼? – Amit
這是它的工作原理。 「操作數中的每一位都只是移動給定數量的位位置,並且空位位置被填充,通常用零(與循環移位形成對比)。」 https://en.wikipedia.org/wiki/Logical_shift –
由於這些都是負值,所以您可能希望保留這個符號位,但正如Amit所說的,它並不完全清楚您要做什麼。 –