有人請解釋如何解決這樣的任務?整數移位運算符
int x = (Integer.MIN_VALUE << 1) >> 1;
我想了解如何解決這樣的例子?如果樣本包含Integer.MIN_VALUE(Integer.MAX_VALUE),我需要做什麼?
有人請解釋如何解決這樣的任務?整數移位運算符
int x = (Integer.MIN_VALUE << 1) >> 1;
我想了解如何解決這樣的例子?如果樣本包含Integer.MIN_VALUE(Integer.MAX_VALUE),我需要做什麼?
移位運算符(y << x
)僅將y
的位向左移位'x'個位置。最右邊的位變成0
。 >>
運算符向右移動,最左邊的位(符號位)的值被複制到新的最左邊的位中。
制定出你的答案,你需要爲初始值(Integer.MIN_VALUE的)的位模式,然後做的操作來獲得所產生的位模式。然後,您可以將其轉換回十進制值。
所以,我需要提出我的號碼2^31作爲一小段代碼,然後執行操作以獲得最終的位模式。我認爲這是解決這個問題的快速方法。 – Drylozav
快速的方法是編寫一個簡短的程序來完成這項工作並給出輸出結果,或者做一個程序員的計算器(Windows中的calc.exe對此很有用)。但要真正理解發生的事情,最好手工做幾次。 –
如果你想了解的位移位運營商的工作,我建議兩兩件事:
嗯,你可以只需按照簡短教程http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
概括地說,通過做<<
(左移),再移動號碼的二進制表示向左
也就是說,如果x = 0b0010
,然後x << 1
成爲0b0100
,新的'零'位被追加到右邊。
相若方式,對於右移位: 如果x = 0b1010
,然後x >> 1
變得0b1101
,最右邊的位自敗,新的「一」位(取決於最左邊的位的值)將被附加在左側。
你需要找出Integer.MIN_VALUE
二進制表示,以解決您的難題,這不應該是非常棘手的。
的最小值被表示爲10000000000000000000000000000000
。這是32 1。爲了清楚起見,讓我們假裝我們只用4位工作。在這種情況下,MIN_INT
將是1000
。這也適用於32位。
然後,我們要留下1移<<
,這將1個職位的所有位在左移。因此,1000
將變爲0000
。這就像乘以2(雖然在這種情況下,我們得到溢出!),
然後我們要右移「>>」 1,這將1個職位的所有位右移。在這種情況下,當右移時複製符號位將變爲0000
。如果是1111
,它將變爲1111
。這就像是除以2,除了在某些情況下,因爲你必須厭倦標誌位複製。
等等,具體的任務是什麼? –
什麼是實際問題...?你知道輪班員的工作原理嗎? – nhgrif
這是功課嗎?你需要在作業後計算出x的價值嗎? –