gpt4 book ai didi

java - 按位与运算符的使用

转载 作者:行者123 更新时间:2023-11-30 06:05:24 25 4
gpt4 key购买 nike

我正在尝试分析一些旧代码以了解它在发生错误时会做什么。这是函数:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com