C++ Gossip: 逻辑运算、位运算
一、逻辑运算
在逻辑上有所谓的“且”、“或”与“反”运算,在C++中也提供这几个基本逻辑运算所需的“逻辑运算符”(Logical operator),分别为“且”(&&)、“或”(||)及“反相”(!)三个运算符。
来看看下面这个程序会输出什么?
int num = 75;
cout << (num > 70 && num < 80) << endl;
cout << (num > 80 || num < 75) << endl;
cout << !(num > 80 || num < 75) << endl;
三段程序分别会输出1、0与1,也就是分别表示true、false与true三种状况。
&&运算中,如果左边的条件已经被评断为false,则可立即判断整个式子为false,因而右边的条件就不会再评断; || 运算中如果左边的条件已经被评断为true,则可以判断整个式子为true,因而右边的式子就不会再判断。
二、位运算
“位运算符”(Bitwise operator),数字设计上有AND、OR、NOT、XOR与补码等运算,在C++中提供这些运算的就是位运算符,它们的对应分别是AND (&)、OR(|)、NOT(!)、XOR(^)与补码(~)。
如:
cout << "AND运算:" << endl;
cout << "0 AND 0/t/t" << (0 & 0) << endl;
cout << "0 AND 1/t/t" << (0 & 1) << endl;
cout << "1 AND 0/t/t" << (1 & 0) << endl;
cout << "1 AND 1/t/t" << (1 & 1) << endl;
cout << "OR运算:" << endl;
cout << "0 OR 0/t/t" << (0 | 0) << endl;
cout << "0 OR 1/t/t" << (0 | 1) << endl;
cout << "1 OR 0/t/t" << (1 | 0) << endl;
cout << "1 OR 1/t/t" << (1 | 1) << endl;
cout << "XOR运算:" << endl;
cout << "0 XOR 0/t/t" << (0 ^ 0) << endl;
cout << "0 XOR 1/t/t" << (0 ^ 1) << endl;
cout << "1 XOR 0/t/t" << (1 ^ 0) << endl;
cout << "1 XOR 1/t/t" << (1 ^ 1) << endl;
cout << "NOT运算:" << endl;
cout << "NOT 0/t/t" << (!0) << endl;
cout << "NOT 1/t/t" << (!1) << endl;