我试图解决一个问题,需要我翻转输入的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与零进行或运算将始终为空操作。 –