一、自增自减操作
#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;
}