Vb.net “为什么?”;(奇数和1)=1“;评估为真?

Vb.net “为什么?”;(奇数和1)=1“;评估为真?,vb.net,syntax,Vb.net,Syntax,这可能是一个基本问题,但我以前从未使用过这种语法。有人能详细地告诉我这个表达式是如何计算为真的吗?[假设IsOdd是布尔类型]谢谢 Dim i As Integer = 3 IsOdd = (i And 1) = 1 因为您在语句末尾赋值为1。3是二进制的11,1是二进制的01 01 and 11 = 01 和1=1 有关按位运算符的参考,请参阅。和运算符执行布尔和运算;如果在要比较的值(i)上设置了低位(1),则该数字为奇数。请尝试以下操作: Dim i As Integer = 3 Di

这可能是一个基本问题,但我以前从未使用过这种语法。有人能详细地告诉我这个表达式是如何计算为真的吗?[假设IsOdd是布尔类型]谢谢

Dim i As Integer = 3
IsOdd = (i And 1) = 1

因为您在语句末尾赋值为1。

3是二进制的
11
,1是二进制的
01

01 and 11 = 01
和1=1


有关按位运算符的参考,请参阅。

和运算符执行布尔
运算;如果在要比较的值(
i
)上设置了低位(1),则该数字为奇数。

请尝试以下操作:

Dim i As Integer = 3
Dim IsOdd As Integer
If (i And 1) Then
    IsOdd = True 
Else 
    IsOdd = False
End If

希望能有帮助。

那不是真的(见马克的答案)。谢谢你的回答。那么,您如何确定二进制数的计算结果是否为001呢?例如,这个表达式如何处理数字4?我必须对二进制数有一个彻底的理解才能理解这一点吗?考虑到1的值可以表示为0的无穷级数和最后的1。受任何位值(0或1)影响的所有这些零将始终为0,因为“0和0=0”和“0和1=0”。因此,只有最后一位是有意义的。如果你想确定的话,你可以彻底地测试它,但是这行代码有效地确定数字是不是奇数。另一个例子:考虑十进制<代码> 204和170 < /代码>。在二进制中,这是
11001100和10101010
。如果两个数字都是1,则得到1,如果其中一个是0,则得到0,因此得到10001000。十进制的结果是88。所以
204和170=88
。这就是像
异或
这样的位运算符的工作原理。@Matthew要真正理解这一点,您需要对二进制整数和位And运算符有一个合理的理解。(如果你需要考虑负数,它会变得更复杂)如果你没有时间完全理解它,你可以把它看作是奇数和假数的一个魔术表达。