Java中对无符号整数的Not操作
现在我~n给出了对整数n的not运算,但是有没有办法把它读作无符号int 例如~50,我得到-51,而实际上我想要13。在Java中有什么方法可以做到这一点吗Java中对无符号整数的Not操作,java,bit-manipulation,bitwise-operators,Java,Bit Manipulation,Bitwise Operators,现在我~n给出了对整数n的not运算,但是有没有办法把它读作无符号int 例如~50,我得到-51,而实际上我想要13。在Java中有什么方法可以做到这一点吗 例如,二进制中的50是110010。当数字颠倒时,我们应该得到001101 如果要保持前导零位不变,可以在“binary not”操作后将其设置为零。我们只需要创建11…1掩码,1的数量等于n中有效位的数量,然后我们可以将所有其他位设置为零: int invert(int n) { int mask = (Integer.high
例如,二进制中的50是110010。当数字颠倒时,我们应该得到001101 如果要保持前导零位不变,可以在“binary not”操作后将其设置为零。我们只需要创建11…1掩码,1的数量等于n中有效位的数量,然后我们可以将所有其他位设置为零:
int invert(int n) {
int mask = (Integer.highestOneBit(n) << 1) - 1;
return (~n & mask);
}
有32位,所有这些零变成了1
int mask = Integer.highestOneBit(n) << 1:
return ~n & - - mask;
你能解释一下~50怎么会变成13吗?在无符号转换中,~50应导致4294967245@Turing85编辑了评论。抱歉搞混了。您忽略了前导数字。整数有32位,因此50的所有26个前导零也将翻转为1,结果是4294967245。