C 语言的逻辑运算符

C 语言的逻辑运算符包括三种:

在这里插入图片描述
逻辑运算符可以将两个关系表达式连接起来.

Suppose exp1 and exp2 are two simple relational expressions, such as cat > rat and debt == 1000 . Then you can state the following:

■ exp1 && exp2 is true only if both exp1 and exp2 are true.
■ exp1 || exp2 is true if either exp1 or exp2 is true or if both are true.
■ !exp1 is true if exp1 is false, and it’s false if exp1 is true.

&& 和 || 都是序列点.

因此, 一旦发现某个元素使得整个表达式无效, 将会立刻停止求值而不会继续向后计算.

例如, 语句:

while ((c = getchar()) != ' ' && c != '\n')

读取字符直到遇到第一个空格或者换行符, 第一个子表达式将读取到的字符赋值给 c. 后面的子表达式还会用到 c. 如果没有求值顺序的保证, 编译器可能会在给 c 赋值之前先对后面的表达式求值.

再例如, 语句:

if (num != 0 && 12 / num)

如果 num 为 0, 则第一个子表达式为假, 则整个表达式为假, 则不再继续对第二个子表达式求值, 这样可以避免把 0 作为除数.

逻辑表达式从左向右求值, 一旦算到了某个子表达式时, 发现整个表达式的值为真或假的结果能得到了, 则停止计算, 因此 && 和 || 都是短求值.

&& 可以用于范围测试, 例如, 语句:

if (num > 90 && num < 100)  // 测试 num 是否大于 90 且小于 100

再例如, 语句:

if (c >= 'a' && c <= 'z')  // 判断 c 是否是一个小写字母
{
    
    
	printf("%c is a lowercase character.\n", c);
}

上述代码只适用于相邻字母与相邻数字一一对应的字符编码, 例如 ASCII.

一种可移植的方法为:

if (islower(c))  // 判断 c 是否是一个小写字母
{
    
    
	printf("%c is a lowercase character.\n", c);
}

无论使用哪种字符编码, islower() 函数都能正常执行.

猜你喜欢

转载自blog.csdn.net/chengkai730/article/details/132194630