目录
转义字符
是以一个字符 "\"开头的字符序列
注意:区别普通字符和转义字符——例子:'n'表示字符n,'\n'转义字符,表示换行。
运算符
优先级 和 结合性
优先级高,并不一定先运算,但是一定是先结合。
不同优先级的运算混合,高优先级的先结合。
同一优先级的运算混合,按照结合性结合。
运算的对象的个数:单目、双目、三目
+加法运算符 -减法运算符
两目运算符、优先级为4、结合方向自左至右
* 乘法运算符 /除法运算符 %求余运算符
两目运算符、优先级为3、结合方向自左至右
/的注意要点:
如果是两个整型数相除,此时相当于是整除的效果
除法运算中 除数不能为 0
%的注意要点:
除数不能为0
求余运算,运算数不能是小数。必须是整数
结果的符号 ,取决于 左操作数 的符号
%求余的应用:判断奇数偶数
number % 2 = 1——奇数 number % 2 = 0——偶数
此外,number%n的取值范围为0〜n-1
--自减运算符
表示一次-1 单目运算符、优先级2、结合方向自右至左
++自增运算符
表示一次+1 单目运算符、优先级2、结合方向自右至左
例子:
int a = 1;
++a;后置加加——先用(表达式的结果)后加(让i自增)
--a;前置加加——先加(让i自增)后加(表达式的结果)
注意:a++;和++a;
如果单独使用,效果一致
参与到别的运算中才发挥作用
++a的效率可能更高,因为不需要开辟空间创建临时变量
运算数a必须是一个可修改变量(10++这样的写法就是错误的)
error: lvalue required as increment operand
这个错误涉及到左值和右值的知识:
int a;
a = 10; (正确) //能放在= 左边的 值 左值 (eg: 变量)
10 = a;(错误) //只能放在 = 右边的 右值 (eg: 常量)
注意++和--的使用
&取地址运算符
单目运算符、优先级2、结合方向自右至左
获取变量对应内存空间的首地址(地址编号)
&a;(正确)左值可定位(eg: 变量)
&10;(错误)右值不可定位(eg: 常量、表达式)
,逗号运算符
优先级最低、结合方向自左至右
语法:表达式1,表达式2,表达式3,...,表达式n
逗号运算表达式的结果是式子中最后一个表达式运算的结果
=赋值运算符
赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量
int a;
a = 10; 赋值运算
赋值表达式:结果 就是a的值 、类型 就是a的类型
a=(b=(c=10)) 可以连续赋值
+= 赋值运算 a += 1 // a = (a + 1)
a -= 1 // a = a - 1
赋值运算符还有+= 、-= 、*= 、/=....
不同类型的数据间混合赋值总结
高精度——>低精度
精度丢失:当将高精度类型的数据赋值给低精度类型时,由于低精度类型无法存储高精度类型的全部信息,可能会导致数值精度的丢失。
例如,将 double
类型的数据赋值给 float
类型时,可能会丢失一些小数部分的精度。
长类型——>短类型
高位截断:当将长类型的数据赋值给短类型时,超过短类型范围的高位部分将被截断。这意味着可能会丢失高位信息,导致数据变化。
例如,将 int
类型的数据赋值给 short
类型时,超过 short
范围的高位部分将被截断。
短类型——>长类型
1.无符号短类型(高位补0):无符号类型在扩展为更长的类型时,高位将自动填充 0。
例如,将 unsigned char
类型的数据赋值给 unsigned int
类型时,高位将被填充为 0。
2.有符号短类型(符号位扩展:高位补符号位):有符号类型在扩展为更长的类型时,将使用符号位进行扩展,也就是高位将被填充为符号位的值。如果符号位是 0(正数),则高位补 0;如果符号位是 1(负数),则高位补 1。
例如,将 char
类型的数据赋值给 int
类型时,如果 char
是负数,int
的高位将被填充为 1。
表达式
运算符和运算数构成的字符序列
注意:
表达式都是有值的、有类型的
隐式类型转换
从右向左 :必转。
从下向上 :低精度和高精度混合运算时,低精度往高精度转。
强制类型转换
格式:(类型)运算数;
注意:强制类型的转换不会影响运算数本身。
标签:类型转换,优先级,运算,嵌入式,运算符,转义字符,类型,表达式,赋值 From: https://blog.csdn.net/weixin_62409078/article/details/140688167