c# - 我无法理解逻辑表达式发生了什么,因为它返回一个整数
问题描述
一个逻辑表达式正在返回一个整数......
我在应用程序中发现了一个错误,问题是部分代码完全错误,但由于逻辑表达式显然正在返回表达式中每个给定整数的随机整数,因此有一段时间没有察觉。我可以修复逻辑条件,但既无法理解也无法向客户解释前面的代码发生了什么。
// 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"
谁能解释一下这里发生了什么?我没有正确解释什么样的表达式/运算符/类型?
解决方案
&
当操作数是数字类型/整数时,是按位逻辑 AND 运算符,并返回一个整数值。位运算符用于进行二进制数学运算。
当操作数为 bothboolean
时,则&
变为布尔逻辑 AND 运算符,返回一个布尔值。
As query.ItemCount
is an int
, and 4020
is an int
,queryResult.ItemCount & 4020
运算符将始终是按位逻辑 AND 运算符,并且您列出的值都是该运算符的正确结果。
现在至于为什么应用程序的原始开发人员选择使用按位和运算符作为循环退出条件的一部分,完全取决于应用程序的要求。但是返回的值不是随机的。
推荐阅读
- arrays - Swift如何过滤数组中的数组
- python - 使用 selenium 和 pyinstaller 不起作用?
- mysql - SQL如何在变化的时间范围内计算不同的ID
- python - Python spyder IDE初学者-for循环定义中的错误
- python - Python在同一行打印多行值
- python - Python从文件夹中的所有excel文件中提取第一张表
- .net - 没有存储库的 ef 核心控制器
- django - Django内联模型表单集和内联模型表单处理初始不同
- python - 使用朴素贝叶斯模型获得良好结果所需的最少特征数是多少?
- windows - 如何在 Skiko(Kotlin MPP 绑定到 Skia)上制作基本动画?