一、自增自减操作
#include <stdio.h> int main() { int val = 0, val1 = 0; ++val; //前操作 printf("val是%d\n", val); val++; //后操作 printf("val是%d\n", val); val1 = ++val; //前自增表达式作为数字使用的时候是自增以后的数字 printf("val是%d,val1是%d\n", val, val1); val1 = val++; //后自增表达式作为数字使用的死后是自增以前的数字 printf("val是%d,val1是%d\n", val, val1); val++ + ++val; //结果不确定,不要在一条语句里对同一个变量多次进行自增或自减计算 return 0; } 运算结果: val是1 val是2 val是3,val1是3 val是4,val1是3
二、逻辑操作符
int val = 0; printf("!8是%d\n", !8); printf("3 < 7 < 5是%d\n", 3 < 7 < 5); //先计算前面的<,后计算后面的<,所以结果是真 printf("3 < 7 && 7 < 5是%d\n", 3 < 7 && 7 < 5); 1 || ++val; //因为||具有短路特征,前面的1可以决定整个逻辑表达式的结果,所以没有进行后面的自增计算 printf("val是%d\n", val); 0 && ++val; //因为&&具有短路特征,前面的0可以决定整个逻辑表达式的结果,所以没有进行后面的自增计算 printf("val是%d\n", val); system("pause"); 运算结果: !8是0 3 < 7 < 5是1 3 < 7 && 7 < 5是0 val是0 val是0
三、位运算
#include <stdio.h> int main() { printf("3 & 5是%d\n", 3 & 5);//0与任何数与运算都是0 printf("3 | 5是%d\n", 3 | 5);//1与任何数或运算都是1 printf("3 ^ 5是%d\n", 3 ^ 5);//异或运算,相同为0,不同为1 return 0; } 运行结果: 3 & 5是1 3 | 5是7 3 ^ 5是6 //变量内容交换 #include <stdio.h> int main() { int val = 3, val1 = 7, tmp = 0; /*tmp = val; val = val1; val1 = tmp;*/ val ^= val1; val1 ^= val; val ^= val1; printf("val是%d, val1是%d\n", val, val1); return 0; } 运算结果: val是7, val1是3
四、位移操作
#include <stdio.h> int main() { printf("10 << 2是%d\n", 10 << 2); //左移2位相当于乘4 printf("10 >> 2是%d\n", 10 >> 2);//右移2位相当于除4取整 return 0; } 运行结果: 10 << 2是40 10 >> 2是2
五、三目运算
#include <stdio.h> int main() { int val = 0; printf("请输入一个数字:"); scanf("%d", &val); val = val >= 0 ? val : 0 - val;//val>=0为条件,如果真,返回val,若果假,返回0-val //val >= 0 ? val = val : val = 0 - val; 不要在问号后使用赋值操作符 printf("绝对值是%d\n", val); return 0; }