Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中对无符号整数的Not操作_Java_Bit Manipulation_Bitwise Operators - Fatal编程技术网

Java中对无符号整数的Not操作

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

现在我~n给出了对整数n的not运算,但是有没有办法把它读作无符号int

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


例如,二进制中的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。