java - Java 中对 Unsigned Int 进行非操作

标签 java bit-manipulation bitwise-operators

所以我现在 ~n 给了我对整数 n 的 not 操作,但是有什么方法可以将其读取为无符号整数吗?

例如~50,我得到-51,而我实际上想要13。在Java中有什么办法可以做到这一点吗?

例如,二进制的 50 是 110010。当数字反转后,我们应该得到001101

最佳答案

如果要保持前导零位不变,可以在“二进制非”运算后将它们设置为零。我们需要做的就是创建 11...1 掩码,其中 1 的数量等于 n 中有效位的数量,然后我们可以将所有其他值设置为零位:

int invert(int n) {
    int mask = (Integer.highestOneBit(n) << 1) - 1;
    return (~n & mask);  
}

关于java - Java 中对 Unsigned Int 进行非操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126402/

相关文章:

c++ - `(i & (i + 1)) - 1` 是什么意思? (在芬威克树中)

c - 为什么输出为负(使用按位非)

java - 在 jar 外面读取文件

Java 将显式锁与同步方法结合起来

c++ - 在不改变值(value)、性能的情况下多次访问位域?

java - 将位的字符串表示形式转换为字节

c++ - 理解按位运算时出错

java - 我们可以专门使用 volatile 写入来强制缓存一致性吗?

java - Play 框架主代码未获取

c - 用于计数位集的内核宏