今日学习运算符和表达式
表达式:由运算符和运算数构成的字符序列
表达式都是有结果的,表达式都是有数据类型的。
一、算术运算:+ 、 - 、 * (乘法) 、 / (除法) 、% 、++、--
1.*(乘法)
eg:a*b
2./(除法)
1)被除数不能为 0
2)两个整型数相除,因为结果还是整型 所以起到整除效果
注:代码出错
1)编译时出错 --- >语法有问题 --- >去代码中找语法问题
2)运行时出错 ---> 逻辑有问题 --- >调整逻辑
3.% (求余)
1)求余的被除数不能为 0
2)求余结果的符号
// 取决于左操作数
eg: 10%3 //1
-10%3 //-1
-10%-3 //-1
10%-3 //1
3)应用
num%2 == 1 //奇数
num%2 == 0 //偶数
%10 ---->0,1,2,...,9
%N ---->[0~N-1]
4.++ 自增
使操作数自增1
1)a++ //后置++ 先用后加
2)++a //前置++ 先加后用
注意:
1. 先用后加和先加后用 的规则,必须是参与到别的运算中时,才发挥作用
2. 运算数必须是一个左值 (变量)
3. 不要写出
printf("%d%d\n",i,i++);
要写成:
int n = i;
int m = i++;
printf("%d%d\n",n,m);
4. 贪心原则:
C 编译系统在处理时,
尽可能多地(自左而右)将若干个字符组成一个运算符
(在处理标识符、关键字时也按同样原则处理)
eg:
i+++++i
i ++ ++ + i
(i++ ++) + i
((i++)++) + i
5.-- 自减
使操作数自减1
注:
lvalue (left value) --- 左值 --- 能放在 = 左边
//变量
rvalue (right value) --- 右值 --- 只能放在=(赋值运算符) 右边
constant //常量的意思
const int a = 10; //a被限定为只读变量
左值 (localable value) ---可定位的值
& //取地址运算
int a = 10; //a对应开一块空间
&a //取到了a所在空间的首地址编号
注意:
左值 -- 可被定位的 -- 叫左值 //能做 & (取地址运算)的就是左值
eg:
变量
右值 -- 不可被定位 -- 叫右值 //不能做 & (取地址运算)的 就是右值
eg:
10
1+2 //常量表达式
a+b //匿名变量 --- 无法定位
二、类型转换
1.强制类型转换---->类型转换运算符
(类型)运算数
注意:强制类型转换只是运算符,并不会对运算数本身造成影响
2.隐式类型转换
从右向左 ---> 必转 ---> char /short 必转 成 int
float 必转为 double (C99标准之后,不再必转)
从下向上 ---> 不同精度混合运算
低精度往高精度转

三、 赋值运算
1.=
一般要求左右两边类型一致
运算:
int a;
a = 10; //将10赋值给a变量空间中
a = 10 //表达式 --- 就是有结果 类型
//赋值运算表达式的结果就是a中的值
规则:
高精度 => 低精度 ---- 精度丢失
长类型 => 短类型 ---- 高位截断
有符号短类型 => 长类型 --- 符号位扩展 , 符号位 是1 就扩展1,是0就扩展0
无符号短类型 => 长类型 --- 默认统统补0
eg:
unsigned short b = 0x8234; // 1000 0010 0011 0100
signed short b = 0x8234; // 0111 0010 0011 0100
a = b; //a = 0xffff8234
2.+=
a += 1; //a = a + 1
四、逗号运算(顺序求值运算)
写法:
表达式1 , 表达式2 , 表达式3, .....
运算过程:
挨个求解表达式
逗号运算的结果:
是最后一个表达式的结果
五、收获
今天学习了算术运算符、隐式类型转换、赋值运算符、不同精度的数据间混合赋值以及逗号运算符。
481

被折叠的 条评论
为什么被折叠?



