为什么不能通过将其与0进行按位或运算来翻转32位无符号int的位?

雷纳格

我试图解决一个问题,该问题需要翻转输入的32位unsigned int的位并打印出来。

我首先尝试通过执行以下操作来解决它:

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位值的long会导致负的long,这是因为long的高32位全部从0翻转为1,并且将long与0进行或运算不会执行任何操作,而将long与0进行AND运算32 1位清除该长整数的高32位,剩下的长整数仅翻转低32位。

路易斯·瓦瑟曼

我相信让您感到困惑的是,这& 0xFFFFFFFFL是一种将int未签名视为签名并将其表示为已签名的方法long| 0什么也没做。从Java 8开始,您还可以使用Integer.toUnsignedStringinta转换String无符号32位值的表示形式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当无符号字符与 11100000 进行或运算时,为什么按位或运算不能按预期工作?

超过32位时不应用无符号long long int的按位运算

>>> 0以使按位运算保持为无符号32位合法吗?

Python:无符号32位按位算术

为什么 16 位和 32 位整数的有符号和无符号加法转换不同?

为什么使用按位运算 (<<) 将 int 值加倍

C函数,使用按位运算来查看int x是否适合n位

用int进行按位运算

无符号转换32位

使用Lua中的32位按位运算比较带符号的64位数字

无符号字符的大小为8位,但是为什么我可以将其(左或右)移位31位?

为什么usize :: max_value()在64位Windows上返回无符号32位整数的最大值?

位旋转以获取32位int的符号位

在无符号短整数中按位存储日期:为什么我的结果减 1?[C]

无符号8位整数的左移运算

为什么C / C ++按位XOR运算符关心符号?

为什么不能在流中直接使用按位运算符?

32位无符号整数的2位右移

无符号类型按位大左移

符号幅度大整数的按位运算

为什么Java中两个短值的按位与运算会导致int值?

为什么按位除法不能像按位乘法那样工作?

按位运算r << 24的结果错误,为什么?

为什么此按位运算在Javascript中失败

为什么按位运算没有提前终止?

为什么位或运算会导致符号扩展而位却不会?

Python按位逆不翻转位

为什么在C ++中进行移位操作后,位域的无符号整数变成有符号整数?

在Java中对128位进行按位运算