我正在尝试分析一些旧代码以了解它在发生错误时会做什么。这是函数:
error = -11;
protected String decodeError(int error){
StringBuffer msg = new StringBuffer();
for(int j=1; j<ERR_16+1; j=j*2 ){
if( (error&j)==j ){
switch(j){
case ERR_1:
msg.append("error1");
break;
case ERR_4:
msg.append("error4");
break;
case ERR_8:
msg.append("error8");
break;
case ERR_16:
msg.append("error16");
break;
}
}
}
return msg.toString();
}
ERR_16 = 16;
ERR_2 = 2;
ERR_4 = 4;
...
如果错误=-11,函数返回 ERR_4。我知道 & 运算符是按位 AND 运算符,但为什么有人应该在这种情况下使用它?
最佳答案
您的二进制(2补码)错误是:
11111111111111111111111111110101
因为左边的位是 1,所以你的整数是负数,第二个 (2) 和第四个 (8) 位设置为 0,这会使你的 int 值为 -(1+2+8) = -11
AND (&) 也被用作掩码,在您的示例中它会像这样:
您的循环值为:
1,2,4,8,16
111111111111111111111111111110101 & 00000000000000000000000000000001 == 1
111111111111111111111111111110101 & 00000000000000000000000000000010 == 0
111111111111111111111111111110101 & 00000000000000000000000000000100 == 4
111111111111111111111111111110101 & 00000000000000000000000000001000 == 0
111111111111111111111111111110101 & 00000000000000000000000000010000 == 16
意味着你会得到输出
错误1、错误4和错误16
这意味着您从单个整数中提取了多个错误
every Bit stands for another error and with the masking (AND) you check which ones are stored in your integer
关于java - 按位与运算符的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580449/