我在Ubuntu 12.04上使用Oracle Java 7.51,并尝试执行此操作
long a = 0x0000000080000001 ^ 0x4065DE839A6F89EEL;
System.out.println("result "+ Long.toHexString(a));
Output: result bf9a217c1a6f89ef
但是我期望结果是4065de831a6f89ef
,因为^运算符在Java中是按位XOR。我看错了Java规范的哪一部分?
您需要L
在第一个整数文字的末尾添加一个:
long a = 0x0000000080000001L ^ 0x4065DE839A6F89EEL;
否则,它是int
文字,而不是a long
(忽略前导零)。然后,^
运算符将第一个操作数值从0x80000001提升为a
long
,但是由于设置了符号位,因此提升的结果为0xFFFFFFFF80000001L。
我在解决一个问题,它说明我们需要找到所有最小数的和,这些最小数需要添加到数组中的元素中,以使按位和大于0。 我的方法是:首先,我决定在所有元素中找到最右边集合的位置,并检查要添加的总的最小数目,以便and大于零。但这是行不通的,有谁能帮我找到另一种Algo吗?
问题内容: 我想找到设置为的最高有效位。我已经从尝试一切可能的方式来进行或运算所有的位从到和它不工作。 就像我想拥有一样。 问题答案: 如果您坚持直接使用按位运算符,则可以尝试如下操作: 我们将掩码初始化为,因为它表示1后跟31 0。我们使用该值来测试索引31(第32个点)是否为1。当将此值与一起使用时,除非在中设置了相应的位,否则将得到0 。如果是这种情况,我们返回。如果不是,则将掩码向右移动1
问题内容: 什么逻辑运营商之间的不同,和位类似物,在使用?各种解决方案的效率是否存在差异? 问题答案: 逻辑运算符对逻辑值进行运算,而按位运算符对整数位进行运算。停止考虑性能,并按其预期目的使用它们。
问题内容: 为什么按位操作打印-1?在二进制中,不为0应该为1。为什么呢? 问题答案: 你实际上很亲密。 在二进制中,不为0应该为1 是的,当我们谈论一点时,这是绝对正确的。 但是,其值为0实际上是全零的32位!将所有32个零转换为32个零。 这是的补码表示形式。 类似地: 也就是说,对于32位无符号二进制补码表示,。 进一步阅读: 补码 这是Java(以及其他系统)用来表示带符号的数字位的系统
今天我学习了左移位运算符()。正如我所理解的,左移位运算符将位移动到指定的左边。我也知道乘以2表示移位。但是我很困惑,比如“移位”到底是什么意思,为什么当赋值的类型不同时,输出会有所不同? 当我调用下面的函数时,它给出的输出为
当我运行 :(32/0,省略)1100 0001 0111 1110 0000 0000 0000 < li> :(第32页,共1页,略)1100 0001 0111 1110 0000 0000 0000 为什么Javascript计算