布尔逻辑混淆

时间:2013-11-01 09:52:04

标签: vb.net boolean-logic

我不完全理解按位操作和逻辑操作之间的区别。请参阅下面的按位操作:

  

x = 7和15

我知道在这种情况下,在单独检查每个位之后,x将等于7。

布尔逻辑如何在较低级别工作。我相信布尔值是32位数据类型(我可能错了)。布尔文字(TRUE和FALSE)是否被视为单个位?

2 个答案:

答案 0 :(得分:1)

不要对布尔的内部结构做任何假设。在许多语言(即C,C ++)中,bool在内部表示为int,除了值0之外的所有内容都被解释为true。但这是依赖于impmentation的,可能会在编译器甚至编译器版本之间发生变化。在java或c#等现代语言中,(相当于)上述语句甚至不会编译,因为int不能隐式地转换为bool。

如果你真的需要按位运算,那么语句当然是有效的,x的值将是7(因为这是按位而且是7和15),但要将其转换为布尔值,那么这样做是明智的明确地说,即if (x != 0) then...bool xb = x != 0。这可能有助于避免对代码的读者造成混淆,并且清楚地表明您已经意识到您正在进行类型转换。

答案 1 :(得分:0)

这通常是这些事情的运作方式。

按位运算对表示其操作数的位执行布尔运算。逻辑运算是对布尔集执行的布尔运算,通常为TRUE和FALSE或1和0.布尔集可以是任何一组不同的项,其中集成员的总数为2。

在操作数7和15上执行按位AND的情况下:如果您使用的系统将它们表示为没有奇怪偏移的直接二进制数,则7将变为二进制的0111,15变为1111的二进制。二进制7上的前导0不是必需的,因为它与将0添加到任何十进制数相同:10 = 010 = 000000000000010,但更容易用前导零来说明操作。

0111   7 in binary
1111  15 in binary
&&&&  bitwise AND
0111  results in 7

如果truefalse表示为二进制1和0,那么“逻辑”and和“按位”and操作之间没有区别。< / p>

1   true as binary 1
0   false as binary 0
&   either logical or bitwise AND
0   results in binary 0

在其他一些数字上尝试按位and,例如1和2

01 1 in binary
10 2 in binary
&& bitwise and
00 results in binary 0

假设除0之外的任何数字都将转换为true,对数字1和2执行“逻辑”and会产生不同的结果

1 the number 1 converted to true and represented as boolean 1
1 the number 2 converted to true and represented as boolean 1
& logical and
1 results in true, here represented as binary 1

当执行涉及浮点数,负数或基本上除正整数之外的任何位运算时,最终可能会得到截然不同的结果。这是由于使用不同方法在内存中存储数字的不同环境。当然,它都是二进制的,但是,数字行并不总是以二进制零为中心,并不总是每个位代表数字的一部分;一些比特可以代表数字或指数的符号。如果您只想将十进制数字投入按位运算,则必须深入了解实现细节。如果您有将数字转换为二进制的方法,那么处理起来会更容易,因为您可以准确地知道这些位及其顺序,并且您将能够测试您的期望是否与您的结果相符。