一、对转义字符的学习和使用
C允许用一种特殊形式的字符常量,就是以一个字符 "\"开头的字符序列。例如,前面已经遇到过的,在 printf函数中的"\ n"' 它代表一个“换 行”符。这是一种“控制字符"'在屏幕上是不能显示的,在程序中也无法用一个一般形式 的字符表示,只能采用特殊形式来表示。表中列出的字符称为“转义字符”,意思是将反斜杠"\"后面的字符转换成另外的意义。
eg:printf("abc\tij#k\n"); :输出 abc ij#k ( \t 制表符使 ij#k 向右移动8个字符的位置, \n 换行)
二、算数运算
1、运算符
基本的算术运算符:
+(加法运算符,或正值运算符,如 3+5+3);
- (减法运算符,或负值运算符,如 5-2-3);
* (乘法运算符,如 3* 5);
/ (除法运算符,如 5/3);
(1).如果是两个整型数相除,此时相当于是整除的效果
(2).除法运算中 除数不能为 0
% (模运算符,或称求余运算符,%两侧均应为整型数据,如 7%4 的值为 3);
(1).取余运算除数不能为0
(2).求余运算,运算数不能是小数。必须是整数
取余运算一般可以用来判断一个整数的奇偶性,整数对2取余数,余数为0是偶数,余数为1是奇数。
2、自增、自减运算符
作用是使变量的值增 或减 1, 例如:
++i, --i(在使用i之前,先使i的值加(减) 1)
i++, i--(在使用i之后,使i的值加(减) 1)
要注意的是:
1. a++ 、++a如果单独使用,效果上没有区别
2. 先用后加或先加后用,是参与到别的运算中时,才发挥作用
3. 运算数,必须是一个可修改变量
3、优先级和结合性
优先级 --- 不同优先级的运算在混合运算时,高优先级的先结合
结合性 --- 同一优先级的运算在混合运算时,按照结合性进行结合。
4、隐式类型转换
整形(int, short, long)和浮点型(fioat, double)和字符型数据间是可以混合运算的
例如:10+'a'+1.5-87.12*'b'是合法的,在进行运算时,不同类型的数据要先转换成同一类型,然后再进行计算,转换规则遵循下图
从右向左 --- 必转
从下向上 --- 低精度向高精度转
5、左值、右值
左值是指可以出现在赋值运算符左边的表达式,它表示一个具有内存地址的对象,可以被修改。变量就是左值,因为它们可以被赋值。左值是可定位的,可以通过取地址运算符 & 获取其内存地址;右值是不可定位的,通常是常量或表达式的结果。
int a;
a = 10;
int b;
b = a;
其中a和b都是左值。
右值是指只能出现在赋值运算符右边的表达式,它通常表示一个值或一个临时对象,不能被修改。常量就是右值,因为它们的值不能被改变。
上边例子中10就是右值,被赋值给左值a。
当使用 const 关键字修饰变量时,该变量就变成了只读的常量,虽然它在本质上还是个变量,但不能被修改。
const int a = 10; // a 是一个常量左值,不能被修改
6、赋值运算
赋值符号"="就是赋值运算符,它的作用是将一个数据赋给一个变量。如 "a= 3" 的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。
int a;
a = 10; //赋值运算
//赋值表达式
//结果 就是a的值
//类型 就是a的类型
a=b=c=10 //可以连续赋值
+= //赋值运算:
a += 1 // a = (a + 1)
a -= 1 // a = a - 1
1. 高精度到低精度的赋值:
当将一个高精度的数据(如 double 或 float )赋给一个低精度的变量(如整型)时,会发生精度丢失。例如, int a; a = 1.23; ,此时 a 的值将为1,小数部分被截断。
2. 低精度到高精度的赋值:
当将一个低精度的数据(如整型)赋给一个高精度的变量(如 double 或 float )时,不会发生数据丢失,低精度数据会被扩展为高精度的数据。
3. 长类型到短类型的赋值:
当将一个长类型的数据赋给一个短类型的变量时,会发生高位截断。例如,将一个 int 类型的值赋给一个 short 类型的变量,如果 int 类型的值超出了 short 类型的表示范围,高位部分将被截断。
4. 短类型到长类型的赋值:
当将一个短类型的数据赋给一个长类型的变量时,需要根据短类型是否有符号来进行处理。
如果短类型是无符号的,那么在扩展到长类型时,高位会补0。
如果短类型是有符号的,那么在扩展到长类型时,高位会补符号位。
例如:
int a = 12345;
short b = (short)a; // 高位截断,b 的值可能会因截断而发生变化
long c = b; // 有符号短类型到长类型,符号位扩展
unsigned short d = 65535;
int e = d; // 无符号短类型到长类型,高位补0
总结:
高精度 => 低精度 --- 精度丢失
长类型 => 短类型 --- 高位截断
短类型 => 长类型 --- 短类型是否有符号
无符号 ---补0
有符号 ---符号位扩展
7、逗号运算(顺序求值运算符):
语法:表达式1,表达式2,表达式3, ...,表达式n
逗号运算的过程:1+2,a++,3+4 ......从左到右,依次运算
逗号运算表达式的结是整个式子中最后一个表达式运算的结果
逗号运算有时会用在for循环中,for(sum = 0,i =0,j = 0;2;3)