为什么AND两个数字得到一个布尔值?

Gin*_*eer 9 c# vb.net digital

我正在开发一个基于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.