我正在开发一个基于Velleman k8055板的小型硬件接口项目.
示例代码来自VB.Net,我将其重写为C#,主要是为了有机会逐步完成代码并理解它.
有一件事令我感到困惑:
在一个阶段,他们读取所有数字输入,然后根据读取的数字输入(以整数形式返回)的答案设置一个复选框,然后将它们与一个数字对应:
i = ReadAllDigital
cbi(1).Checked = (i And 1)
cbi(2).Checked = (i And 2) \ 2
cbi(3).Checked = (i And 4) \ 4
cbi(4).Checked = (i And 8) \ 8
cbi(5).Checked = (i And 16) \ 16
Run Code Online (Sandbox Code Playgroud)
我有一段时间没有完成数字系统,我明白他们想要做什么,但它对两个数字有什么影响?0以上的一切都不等于真吗?
你会如何将其翻译成C#?
Jon*_*eet 19
这是一个按位AND,而不是逻辑AND.
这些中的每一个基本上确定是否设置了单个位i,例如:
5 AND 4 = 4
5 AND 2 = 0
5 AND 1 = 1
Run Code Online (Sandbox Code Playgroud)
(因为5 =二进制101,而4,2和1分别是二进制100,010和001的十进制值.)
Fre*_*els 15
我想你必须把它翻译成这个:
i & 1 == 1
i & 2 == 2
i & 4 == 4
Run Code Online (Sandbox Code Playgroud)
etc ...这是使用按位AND运算符.
当您使用按位AND运算符时,此运算符将比较两个给定值的二进制表示,并返回仅设置这些位的二进制值,这些值也在两个操作数中设置.
例如,当你这样做时:
2和2
它会这样做:
0010 & 0010
Run Code Online (Sandbox Code Playgroud)
这将导致:
0010
0010
&----
0010
Run Code Online (Sandbox Code Playgroud)
然后,如果你将这个结果与2(0010)进行比较,它将返回true.