首页 > 解决方案 > 我无法理解逻辑表达式发生了什么,因为它返回一个整数

问题描述

一个逻辑表达式正在返回一个整数......

我在应用程序中发现了一个错误,问题是部分代码完全错误,但由于逻辑表达式显然正在返回表达式中每个给定整数的随机整数,因此有一段时间没有察觉。我可以修复逻辑条件,但既无法理解也无法向客户解释前面的代码发生了什么。

// 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 - True”
一次和多次
“ - False”

但实际上我有:
“0 - 0”
“1 - 0”
“10 - 0”
“1000 - 928”
“2000 - 1936”
“4000 - 4000”
“4020 - 4020”
“5000 - 896”
“10000 - 1808"

谁能解释一下这里发生了什么?我没有正确解释什么样的表达式/运算符/类型?

标签: c#logical-operators

解决方案


&当操作数是数字类型/整数时,是按位逻辑 AND 运算符,并返回一个整数值。位运算符用于进行二进制数学运算。

当操作数为 bothboolean时,则&变为布尔逻辑 AND 运算符,返回一个布尔值。

As query.ItemCountis an int, and 4020is an intqueryResult.ItemCount & 4020运算符将始终是按位逻辑 AND 运算符,并且您列出的值都是该运算符的正确结果

现在至于为什么应用程序的原始开发人员选择使用按位和运算符作为循环退出条件的一部分,完全取决于应用程序的要求。但是返回的值不是随机的。


推荐阅读