“或”除了表示为“||”,还可以怎么表示?(题目不让用&&, |, !, and, or, not, compl, ^, ~, +, return
)
由于 ∣∣||∣∣ 运算有一真,结果为真。当程序判断到有真值的语句时,后续语句会被短路,不再执行
if( printf("这句为真,且会被执行") || printf("这句也为真,但由于前面一句已经判断为真,这句被短路了,不会再执行"));
代码输出如下:
借助这一特性,在数组遍历时,某些可能会越界的条件判断实际上不会越界:
for(int i=0;i<n;++i)
{
if((i==0 || s[i-1]==' ') && s[i]!=' ') ++ans;
}
当 i=0i=0i=0 时,s[i−1]s[i-1]s[i−1] 显然会因为数组越界而报错,但此时由于前面一句判断语句 i==0i==0i==0结果为真,s[i−1]==′ ′s[i-1]=='~'s[i−1]==′ ′ 的判断语句会被短路,不再需要判断也不会执行,所以并不会导致数组越界发生。
除了使用“||”以外,表示“或”的方法还有按位或“|”,即使用“|”符号。这个方法是通过将两个数按位进行或运算得到的结果。在C++中,可以通过使用位运算符“|”来实现。例如:
int a = 3;
int b = 5;
if ((a | b) == 7) {
cout << "a or b equals 7" << endl;
}
这段代码中,如果a和b的按位或结果等于7,则输出相应的信息。值得注意的是,使用位运算符要特别小心,因为有时候会出现意想不到的结果,比如负数的运算和符号位的影响等等。因此,在实际应用中要慎重使用。
除了位运算符“|”以外,我们还可以使用条件运算符“?:”来表示“或”的逻辑关系。例如:
bool has_positive(int a, int b) {
return (a > 0) ? true : (b > 0);
}
这个函数接受两个整数作为参数,如果它们至少有一个是正数,则返回真,否则返回假。这里使用了条件运算符“?:”,它的语法是:
(condition) ? expression1 : expression2
当条件满足时,返回expression1的值,否则返回expression2的值。
最后,还有一种方法是使用逗号运算符“,”,它可以用来表示“或”的逻辑关系。例如:
int a = 3, b = 4, c = 5;
if (a == 3, b == 4, c == 6) {
cout << "either a or b is 3" << endl;
}
这段代码中,如果a等于3或者b等于4,则输出相应的信息。注意到这里用了逗号运算符来将三个条件连接起来,其中只有最后一个条件会影响整个表达式的值。这个运算符的优先级非常低,因此要特别小心使用。
综上所述,以上是几种在C++中表示“或”的方法,需要根据具体问题来选择合适的方法。
难道是用异或?
else if ?