Home C&C++函数库 c++ 语法 程序源码 Linux C库

布尔运算

位(bit)是我们定义的最小信息单位,因为它只包含值1或0,这两个值代表是或否, activated或deactivated, 真(true)或假(false)等等。也就是说:两种可能的状态, 每一种都是相对的,没有任何模糊。我们要考虑的一个位的两个可能的值是0和1。

一些操作可以用位来执行,可以与其他位一起执行,也可以单独执行。 这些运算被称为布尔运算,这个词来自于一位数学家的名字, 他对这个领域做出了更多的贡献:乔治布尔(1815-1864)。

所有这些操作都有一个既定的行为,所有这些操作都可以应用于任何位, 无论它们包含哪个值(0或1)。下面是一个基本布尔运算的列表和一个包含该运算行为的表, 以及每个可能的位组合。

☲  AND(与)


这个操作在两个比特(a和b)之间执行。 如果a和b都等于1,结果是1,否则结果是0。

AND (&)
a b a&b
0 0 0
0 1 0
1 0 0
1 1 1


☲ OR(或)


"或"在两个比特(a和b)之间执行。如果两个比特中有一个是1,或者两个都是1,则结果是1。 否则结果是0。

OR (|)
a b a|b
0 0 0
0 1 1
1 0 1
1 1 1


☲  XOR(逻辑或)


这个操作在两个比特(a和b)之间执行。 如果a和b不相等,则结果是1,否则结果是0。

XOR (^)
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0


☲  NOT(非)


该操作在单个位上执行。它的结果是位的实际值取反: 如果它被设为1,它就变成0,如果它是0,它就变成1:

NOT(~)
a ~a
0 1
1 0


这是4个基本的布尔运算(AND, OR, XOR和NOT)。结合这些运算,我们可以从两个比特中得到任何可能的结果。

在c++中,这些操作符可以用于任何整数数据类型的变量;布尔运算执行变量的每个位。 例如,假设两个变量:a和b,都是unsigned char类型,其中a包含195(二进制为11000011), b包含87(二进制为01010111)。如果我们写以下代码:
unsigned char a=195;
unsigned char b=87;
unsigned char c;
c=a&b;

也就是说,我们在a和b之间进行了位AND运算。该操作在位于同一位置的两个变量的位之间执行: c的最右边的位将存储a和b的最右边的位执行AND操作的结果:

同样的操作也在两个变量的第二位和第三位之间执行,以此类推, 直到两个变量的所有位之间执行操作(每个变量只与另一个变量的相同位)。

c的最终二进制值是01000011,即十进制的67。195&87等于67。
联系我们 免责声明 关于CandCplus 网站地图