逻辑运算符使用
逻辑运算符&&,||和!
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
if ( ++i > 0 || ++j > 0 ) {
printf("%d\n", i); //1
printf("%d\n", j); //0
}
return 0;
}
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
if ( ++i > 0 && ++j > 0 ) {
printf("%d\n", i); //1
printf("%d\n", j); //1
}
return 0;
}
逻辑运算符的短路特性
||,&&从左向右开始计算,当前一个表达式的结果能决定整个表达式的结果,则后面的表达式根本就不会计算或调用;
#include <stdio.h>
int g = 0; //全局变量
int f() {
return g++; //先用后加
}
int main() {
if ( f() && f() ) { //程序短路
printf("%d\n", g); //不被执行
}
printf("%d\n", g); //1
return 0;
}
以上代码结果只打印一个1
!到底是什么
#include <stdio.h>
int main() {
printf("%d\n", !0); //1
printf("%d\n", !1); //0
printf("%d\n", !100); //0
printf("%d\n", !-1000); //0
return 0;
}
C语言中的逻辑符!只认得0,只知道见了0就返回1;非零的都当作真,作用后都返回0;
三目运算符(a?b:c)可以作为逻辑运算符的载体
规则:当a的值为真时,返回b的值,否则返回c的值
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
int c = 0;
/* int *p = NULL; */
c = a < b ? a : b; //c = 1;
//(a < b ? a : b) = 3; //不能做左值;
*(a < b ? &a : &b) = 3; //合法
/*
* p = (a < b ? &a : &b);
* *p = 3;
*/
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
逻辑运算符&&,||和!
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
if ( ++i > 0 || ++j > 0 ) {
printf("%d\n", i); //1
printf("%d\n", j); //0
}
return 0;
}
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
if ( ++i > 0 && ++j > 0 ) {
printf("%d\n", i); //1
printf("%d\n", j); //1
}
return 0;
}
逻辑运算符的短路特性
||,&&从左向右开始计算,当前一个表达式的结果能决定整个表达式的结果,则后面的表达式根本就不会计算或调用;
#include <stdio.h>
int g = 0; //全局变量
int f() {
return g++; //先用后加
}
int main() {
if ( f() && f() ) { //程序短路
printf("%d\n", g); //不被执行
}
printf("%d\n", g); //1
return 0;
}
以上代码结果只打印一个1
!到底是什么
#include <stdio.h>
int main() {
printf("%d\n", !0); //1
printf("%d\n", !1); //0
printf("%d\n", !100); //0
printf("%d\n", !-1000); //0
return 0;
}
C语言中的逻辑符!只认得0,只知道见了0就返回1;非零的都当作真,作用后都返回0;
三目运算符(a?b:c)可以作为逻辑运算符的载体
规则:当a的值为真时,返回b的值,否则返回c的值
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
int c = 0;
/* int *p = NULL; */
c = a < b ? a : b; //c = 1;
//(a < b ? a : b) = 3; //不能做左值;
*(a < b ? &a : &b) = 3; //合法
/*
* p = (a < b ? &a : &b);
* *p = 3;
*/
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}