您的位置:首页 > 编程语言 > C语言/C++

C++ 初学者指南 第二篇(7)

2009-12-29 22:14 169 查看
项目2-2 构建异或关系的逻辑运算
C++中没有定义异或关系的逻辑运算符,也就是XOR。异或运算是一种二进制的运算,只有当两个运算数中只有一个为true的时候其结果才是true。其真值表如下:

p
q
p XOR q
false
false
false
false
true
true
true
false
true
true
true
false
一些程序员认为缺失了异或运算是C++的一个缺憾。也有人认为没有引入异或运算是C++的简化设计,避免了冗余的特性。他们认为使用C++中提供的其他三个逻辑运算符就很容易构造出异或运算。
在本项目中,我们将使用&&,||,和!运算符来构建异或运算。
步骤:
1. 创建一个新的文件叫做XOR.cpp
2. 假定有两个bool类型变量p和q,那么异或运算可以通过下面的方式来构造:
(p||q)&&!(p&&q)
我们来仔细研究一下这个表达式。首先,p和q做或运算,如果其值为true,说明其中至少有一个为真。接着,p和q做与的运算,其值只有两者都为true的时候为true。然后对其结果做非运算,!(p&&q)的值只有p或者q或者两者都是假的时候。最后,这个结果和(p||q)相与。因此,整个表达式只有在其中一个操作数为true的情况下才为true。
3. 下面是完整的程序。他演示了四种异或运算的结果。
/* Project 2-2 Create an XOR using the C++ logical operators. */
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
bool p, q;
p = true;
q = true;
cout << p << " XOR " << q << " is " << ( (p || q) && !(p && q) ) << "/n";
p = false;
q = true;
cout << p << " XOR " << q << " is " << ( (p || q) && !(p && q) ) << "/n";

p = true;
q = false;
cout << p << " XOR " << q << " is " << ( (p || q) && !(p && q) ) << "/n";

p = false;
q = false;
cout << p << " XOR " << q << " is " << ( (p || q) && !(p && q) ) << "/n";

return 0;
}
4. 编译并运行这个程序。输出结果如下:
1 XOR 1 is 0
0 XOR 1 is 1
1 XOR 0 is 1
0 XOR 0 is 0
5. 注意异或运算表达式最外层的括号。由于运算符优先级的关系,它们是必须的。<<运算符的优先级是高于逻辑运算符的。为了证实这一点,可以尝试去掉最外层的括号,然后试图编译这个程序。结果就是有编译错误。
练习
1. %运算符是用来做什么的?他可以被应用那种类型的数据上?
2. 如何声明一个int类型的名字叫做index的变量,他的初始值为10?
3. 关系或者逻辑运算符的结果是什么类型?
答案
1. % 是取模运算符。他返回整除的余数,他可以被应用于整形数上。
2. int index = 10;
3. 关系和逻辑运算表达式的结果是bool类型的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: