我試圖解決一個問題,需要我翻轉輸入的32位無符號整型和打印它的位。爲什麼我不能通過按位或0來翻轉32位無符號整型數據的位?
我第一次嘗試做這樣的事情解決它:
Scanner scanner = new Scanner(System.in);
// EDIT System.out.println(~scanner.nextLong() | 0);
System.out.println(~scanner.nextLong() | 0x00000000L);
但是這並沒有產生正確的答案。
然後,我能夠與解決它:
System.out.println(~scanner.nextLong() & 0xFFFFFFFFL);
有人能向我解釋爲什麼我第一次嘗試沒有工作?
編輯:澄清了一下代碼。
EDIT2:這裏的問題是,對於那些誰是納悶:https://www.hackerrank.com/challenges/flipping-bits
EDIT3:噢,天哪。我真的沒有想到這一點。由於長整數的高32位全部從0變爲1,並且將該長整數與0進行或運算沒有任何作用,所以只有具有值的較低32位會導致負長,而將長整數32個1位將清除該長整數的高32位,只留下長32位的低位。
具有零的按位或不會改變任何內容。你的意思是異或('^')? –
@ChrisMartin,與零異或也不會改變任何東西。 –
在Java中,沒有像「32位無符號整數」那樣的東西。並且將int與零進行或運算將始終爲空操作。 –