if(xxx) 当xxx为0时if 假
xxx不为0if为真
if (a++&&b++)
计算机先看a值 a为0 与运算直接为假 因此a++后b++不会运行 短路
if(xxx) 当xxx为0时if 假
xxx不为0if为真
if (a++&&b++)
计算机先看a值 a为0 与运算直接为假 因此a++后b++不会运行 短路
总结:
条件表达式的“乘法口诀”
如果a不等于b——if (a - b)
如果a不等于0——if (a)
如果a等于0——if (!a)
if (a - b) ——如果a不等于b
if (a)——如果a不等于0
if (!a)——如果a等于0
短路运算:(因为前半部分已经判断完了,后半部分不影响整体表达式的结果,因此不执行了,效率优先)
False &&(这部分不执行)
Ture || (这部分不执行)
i && ......
相当于
i == 0 || ......
int a = 0, b =0;
(a++) && (b++); //该值为0,因为逻辑与先对a和b进行逻辑运算,然后,a和b再进行++的自增加1的运算。
求val模2的值,可以写为(val & 1)
计算奇数个数(或者偶数个数)的计数器,可以这么写:
count += val & 1;//表示,如果为奇数,则count加1;否则加0;
任务:打印0 - 9,每个数字有一个空格, 最后没有空格:(需要处理的地方在于:前后的空格如何去掉)
如果i是0,则不执行后面的语句;否则执行;
for (int i = 0; i < 10; i++){
i && printf(" "); //短路运算原则,这么写比if else更加高效!
printf("%d", i);
}
for (int i = 0; i < 10; i++){
if (i) printf(" ");
printf("%d", i);
}
用a-b替代a!=b,能防呆防止写错了。
语言的短路机制,效率比条件判断高。
随机种子,srand(time(0))