一:转义字符
在其中制表符\t需要着重理解,他的作用为向后移动八个字符,包含了已经输出的字符,如果输出的字符超过八个那将从第九个字符开始继续往后八个字符。思考一下,下面将输出什么?
输出结果为:
其中/r的作用为回到本行的开头。
二:运算符
上图是c语言中的所有运算符,先来了解一下优先级,结合性及表达式
优先级 --- 不同优先级的运算 混合运算时,高优先级的先结合
结合性 --- 同一优先级的运算 混合运算时,按照结合性进行结合。
表达式:
由运算符 和 运算数构成字符序列
表达式都是有值的
表达式都是有数据类型的
了解过后,我们先看以下几种运算符:
(1):算术运算符:+,-,*,/,%
其中/为除运算符,---如果是两个整型数相除,此时相当于是整除的效果
-----除法运算中 除数不能为 0
%为求余运算 -----除数不能为0
-----求余运算,运算数不能是小数。必须是整数
-----结果的符号 ,取决于 左操作数 的符号
求余运算一般有两个作用
//1.判断 奇数 偶数
%2 == 1 奇数
== 0 偶数
//2.限定取值范围 %N
0~N-1
(2):自增自减运算符,++,--
int a = 1;
a++ //后置加加 --- 先用(表达式的结果) 后加(让i自增)
++a //前置加加 --- 先加(让i自增) 后用(表达式的结果)
注意:
1. a++ ++a如果单独使用,效果上没有区别
2. 先用后加 或 先加后用,是参与到别的运算中时,才发挥作用
3. 运算数,必须是一个可修改变量
10++ (x)
如果error: lvalue required as increment operand
lvalue --- left value //(左值)表示需要左值
a = 10; //能放在= 左边的 值 左值 (eg: 变量)
10 = a;(x) //只能放在 = 右边的 右值 (eg: 常量)
const int a = 10; //constant --- 常量
//a其实还是个变量,但是这个变量只读(不能修改)
可以通过后续学的地址进行操作,也可以是左值
&a //取地址运算 --- 获取a对应内存空间的首地址 --地址编号
“浮点类型也可以自增自减”
注意?????
编译会报错
贪心法:
从左到右逐个扫描,将字符尽可能多的结合成c语言运算符
i+++++i
i ++ ++ + i //
i++ ++ + i
((i++)++) + i
注意:
printf("%d %d",i,i++);//1.函数传参顺序 2.i++ 先用后加,什么时候加 --没有统一规定
建议:
m = i;
n = i++;
printf("%d %d\n",m,n);
总之,不要写出别人看不懂的、也不知道系统会怎样执行的程序。
(3):赋值运算符“=”
赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量
a = 10; //赋值运算
//赋值表达式
//结果 就是a的值
//类型 就是a的类型
a=(b=(c=10)) //可以连续赋值
+= //赋值运算
a += 1 // a = (a + 1)
a -= 1 // a = a - 1
(4):逗号运算(顺序求值运算符):
,
语法:
表达式1,表达式2,表达式3, ...,表达式n
逗号运算的过程:
1+2,a++,3+4 //从左到右,挨个运算
//逗号运算表达式的结果 --- 是整个式子中最后一个表达式运算的结果
for(sum = 0,i =0,j = 0;2;3)
输出b=7,a=2
三:隐式类型转换
从右向左 --- 必转
从下向上 --- 低精度向高精度转
四:不同类型的数据间混合赋值
高精度 => 低精度 --- 精度丢失
长类型 => 短类型 --- 高位截断
短类型 => 长类型 --- 短类型是否有符号
无符号 ---补0
有符号 ---符号位扩展
int a='abcd';格式不对,编译会有警告,会被识别成16进制0x61626364
%d:输出它的10进制1,633,837,924
%c:输出d ,高位截断
%#x:输出0x61626364