逻辑表达式返回一个整数...
我在应用程序中发现了一个错误,问题是部分代码完全错误,但有一段时间没有被感知到,因为逻辑表达式显然为表达式中的每个给定整数返回随机整数。 我可以修复逻辑条件,但既无法理解也无法向客户解释以前的代码发生了什么。
// This is the actual code
for (int i = 1; i <= (queryResult.ItemCount & 4020); i++) {...}
// My simulation in the Visual Studio C# interactive console
int qr = 0;
Print(qr + " - " + (qr & 4020));
qr = 1;
Print(qr + " - " + (qr & 4020));
qr = 10;
Print(qr + " - " + (qr & 4020));
qr = 1000;
Print(qr + " - " + (qr & 4020));
qr = 2000;
Print(qr + " - " + (qr & 4020));
qr = 4000;
Print(qr + " - " + (qr & 4020));
qr = 4020;
Print(qr + " - " + (qr & 4020));
qr = 5000;
Print(qr + " - " + (qr & 4020));
qr = 10000;
Print(qr + " - " + (qr & 4020));
我期望
"4020 - 真"一劳永逸
" - 假">
但实际上我已经得到了:"0 - 0"1 - 0"10 - 0"1000 - 928"2000 - 1936"4000 - 4000"4020 -4020"5000 - 896"10000 - 1808">
谁能解释一下这里发生了什么?我解释不正确的表达式/运算符/类型是什么?
>当操作数是数字类型/积分时,&
是按位逻辑 AND 运算符,并返回整数值。按位运算符用于执行二进制数学运算。
当操作数都boolean
时,&
成为布尔逻辑 AND 运算符,返回布尔值。
由于query.ItemCount
是int
,而4020
是int
,queryResult.ItemCount & 4020
运算符将始终是按位逻辑 AND 运算符,并且您列出的值都是该运算符的正确结果。
现在至于为什么应用程序的原始开发人员选择使用按位和运算符作为循环退出条件的一部分,完全取决于应用程序的要求。但返回的值不是随机的。