赋值运算注意点:
- 1.赋值运算的结合性:右结合性
- 2.赋值运算的优先级低于算数运算符
int res = 10;
res += 10 - 5; // res = res + (10 - 5); res = 10 + (10 - 5);
printf("res = %i\n", res);
自增自减
自增和自减可以写在变量前面, 也可以写在变量后面
-
写在前面和后面的区别:
- 如果自增和自减写在变量前面, 代表先自增和自减再参与其它运算
- 如果自增和自减写在变量后面, 代表先参与其它运算再自增和自减
int num = 10;
int res = 10 + num++; // int res = 10 + 10; num++
int res = 10 + num--; // int res = 10 + 10; num--
printf("res = %i\n", res); // 20 20
printf("num = %i\n", num); // 11 9
int num = 10;
int res = 10 + ++num; // ++num; int res = 10 + 11
int res = 10 + --num; // --num; int res = 10 + 9
printf("res = %i\n", res); // 21 19
printf("num = %i\n", num); // 11 9
-
注意点:
- 1.自增和自减只能用于变量, 不能用于常量和表达式
- 2.在企业开发中自增和自减最好单独出现
- 3.同一个表达式中同一个变量同时自增或自减, 这种格式的表达式在C语言中没有规定如何运算
- 所以结果是不确定的, 在不同的编译器下运行的结果不同
sizeof运算符
- sizeof运算符
- 格式:
- 第一种格式:
- sizeof(变量/常量/数据类型);
- 第二种格式:
- sizeof 变量/常量
- 作用:
- sizeof运算符是专门用于计算变量/常量/数据类型占用的存储空间的
- int 占4字节 ; double 占8字节
- 注意点:
- 1.sizeof是一个运算符, 不是一个函数
- 2.既然sizeof是一个运算符, 所以它也有优先级
- 3.sizeof运算符的优先级高于算数运算符
int res = sizeof(3.14 + 1);
printf("res = %i\n", res);//8
int res = sizeof3.14 + 1;
printf("res = %i\n", res);//9
关系运算符
- 关系运算符
> >= < <= == !=
返回值: 要么是0, 要么是1
0 代表关系不成立 1代表关系成立
在C语言中非0即真
只有数值是0 才代表是假, 其它的都是真 - 优先级
> >= < <= 优先级高于 == !=
逻辑运算符
- 逻辑运算符
- 1.逻辑与 &&
规则: 一假则假
特点: 逻辑短路, 只要第一个表达式为假, 那么第二个表达式就不会计算
int a = 10;
int res = (10 > 19) && (++a > 5);
printf("res = %i\n", res); // 0(假)
printf("a = %i\n", a); // 10
// 原因: 无论第二个表达式的结果是真是假, 整个表达式的结果都是假, 所以再计算第二个表达式没有任何意义, 所以只要第一个表达式为假, 第二个表达式就不会运算
- 2.逻辑或 ||
规则: 一真则真
int a = 10;
int res = (10 > 9) || (++a > 5);
printf("res = %i\n", res); // 1(真)
printf("a = %i\n", a); // 10
// 原因: 无论第二个表达式的结果是真是假, 整个表达式的结果都是真, 所以再计算第二个表达式没有任何意义, 所以只要第一个表达式为真, 第二个表达式就不会运算
- 3.逻辑非 !
规则: 真变假假变真
三目运算符
- 三目运算符
- 格式: 表达式 ? 结果A : 结果B;
- 结果:
表达式的值为真, 那么就返回结果A
表达式的值为假, 那么就返回结果B - 注意点:
三目运算符中 ?:不能分开使用
三目运算符的优先级低于算数运算符
int temp1 = 10 + 5;
int temp2 = 5 + 5;
int res = (temp1 > temp2) ? 666 : 888;
printf("res = %i\n", res);//666