// 1.类型转换
/*
// int 占用4个字节 double 占用8个字节
// 只是相同类型的数据才能进行运算, 隐式类型转换 将小类型转换为大类型, 然后再进行运算
// 在赋值的时候系统又给我们进行了一次隐式类型转换
// 发现, 如果在隐式类型转换的时候, 将大类型转换为小类型会丢失精度
int result = 10.9;
printf("result = %d\n", result);
// 强制类型转换格式: (类型)被强制类型转换的数据
int result2 = (int)10.9;
printf("result2 = %i", result2);
// 自动类型提升
// 自动类型的提升, 将参与运算的数据都转换为同一类型后再运算
// 会自动将小的数据类型提升为大的数据类型
int result3 = 1 + 9.9; // 1.0 + 9.9 = 10.9
*/
/*
// 在算术运算中, 参与运算的是什么类型, 计算出来就是什么类型
// double result = 1.0 / 2; // 1.0 / 2.0 --> 0.5
// double result = (double)1 / 2;// 1.0 / 2.0 --> 0.5
double result = (double)(1 / 2); // (double)(0) --> 0.0
printf("result = %lf\n", result);
*/
// 2.算术运算符的结合性, 左结合, 从左至右的计算
// 3.算术运算符的优先级 * / % 大于 + -
// 如果优先级和结合同时存在, 那么先优先级再结核性
运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取模(取余)
// 1.最简单的赋值运算符
// 赋值运算符的结合性: 从右至左
// int result = 10;
// 2.复合赋值运算符: += -= *= /= %=
int result = 10;
// result = result + 5;// result = 10 + 5; result = 15
// result += 5; // 相当于 result = result + 5;
// result -= 5; // 相当于result = result - 5;
自增自减
result = result + 5 → result += 5
result = result + 1 → result += 1
加1: result++先运算再自增; ++result 先自增再运算;
关系运算符:
>
<
>=
<=
==
!=
关系运算符的返回值只有两种, 要么真, 要么假. 1(真)和0(假)
例 int result = a > b;// 吗? 大于, 真, 非0即真.
// 关系运算符也有优先级. > < >= <= 优先级大于 == !=
逻辑运算符
/*
逻辑运算符的返回值只有两种: 要么真要么假, 要么是1(真), 要么是0(假)
&&(与运算)
格式: 表达式1 && 表达式2
结合性: 从左至右
只有表达式1和表达式2都为真的时候, 逻辑与表达式才返回真
如果表达式1或者表达式2中有一个是假, 那么逻辑与表达式返回的结果都是假
口诀: 一假则假
||(或运算)
格式: 表达式1 || 表达式2
结合性: 从左至右
只要表达式1或者表达式2中有一个是真的, 逻辑或表达式返回的值就是真
只有表达式1和表达式2的值都是假, 逻辑或的值才是假
口诀: 一真则真
!(非运算)
格式: !表达式
结合性: 从右至左
如果表达式是真, 就返回假
如果表达式是加, 就返回真
取反
*/
注意点:与 或 前面表达式成立,则后面表达式不参与运算,称为逻辑运算符的短路
三目运算符
// 三目运算符格式: 条件表达式 ? 结果A : 结果B
// 结合性: 从左至右
// 只要条件表达式为真就返回结果A, 如果条件表达式为假, 那么就返回结果B
// a大于b吗? 如果a大于b就返回a, 否则返回b
// 三目运算符的优先级: 低于关系运算符和算术运算符
if注意点
// 因为C语言中, 任何数值都有真假性, 非0即真
// 以后如果要判断某一个变量是否等于某一个值, 建议把常量写前面, 变量写后面
快捷键
// 移动代码的快捷键:
// 上下移动:� command + option + (上) /
// 左右移动: command + ](右) [(左)