9、转义字符
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中。不可打印的控制字符和特定功能的字符
转义字符 | 意义 | A S C I I码值(十进制) |
\ a | 响铃( B E L ) | 0 0 7 |
\ b | 退格( B S ) | 0 0 8 |
\ f | 换页( F F ) | 0 1 2 |
\ n | 换行( L F ) | 0 1 0 |
\ r | 回车( C R ) | 0 1 3 |
\ t | 水平制表( H T ) | 0 0 9 |
\ v | 垂直制表( V T ) | 0 11 |
\ \ | 反斜杠 | 0 9 2 |
\ ? | 问号字符 | 0 6 3 |
\ ' | 单引号字符 | 0 3 9 |
\ " | 双引号字符 | 0 3 4 |
\ 0 | 空字符( N U L L ) | 0 0 0 |
\ d d d | 任意字符 | 三位八进制 |
\ x h h | 任意字符 | 二位十六进制 |
注意:
- 转义字符中只能使用小写字母,每个转义字符只能看作一个字符。
- \v 垂直制表和\f 换页符对屏幕没有任何影响,但会影响打印机执行相应操作。
在C程序中,使用不可打印字符时,通常用转义字符表示。
10、符号常量
C语言允许将程序中的常量定义为一个标识符,称为符号常量。符号常量一般使用大写英文字母表示,以区别于一般用小写字母表示的变量。符号常量在使用前必须先定义,定义的形式是:
#define <符号常量名> <常量>
例如:#define PI 3.1415926
# define是C语言的编译预处理命令,它表示经定义的符号常量在程序运行前将由其对应的常量替换。
11、变量
<1>.整型变量(太熟悉了,我就不展开了)
<2>.实型变量
实型变量分为单精度(float型)和双精度(double型)。如:
float x,y; / *定义x , y为单精度实数* /
double z; / *定义z为双精度实数* /
- 一个float型数据在内存中占4个字节(32位),提供7位有效数字
- 一个double型数据占8个字节(64位),双精度提供15 ~ 16位有效数字
- 值得注意的是,实型常量是double型,当把一个实型常量赋给一个float型变量时,系统会截取相应的有效位数。
<3>.字符变量
字符变量用来存放字符变量,注意只能存放一个字符,不要以为在一个字符变量中可以放字符串。字符变量的定义形式如下:
char c1, c2;
它表示c 1和c 2为字符变量,各放一个字符。
因此可以用下面语句对c 1、c 2赋值:
c1 = 'a';
c2 = 'b';
- 字符变量可以当整数来进行运算,所对应的值为其ASCII码值
12、优先级记忆法:
去掉一个最高级,再去掉一个最低级。
一、二、三和赋值。
说明:最高级是括号和元素及成员(共4个).最低级是逗号((1个).一是单目运算符(共9个),二是双目运算符(共1 F}个),三是三目运算符(1个),赋值是赋值运算符(11个).接着。在双目运算符中。还包含有}0个优先级。这10个优先级记忆方法是:
算术2.关系2,逻辑2;移位1插在前,逻辑位3插在后。
说明:"算术2}表明算术运算符又分二个优先级,、,/和%在前,+,-在后。"关系2"表明它在算术运算符后边有二类优先级,<,<=,>,>=在前,+,-在后。"逻辑2"表明它在关系运算符之后。又分2个优先级,&&在前,||在后。"移位1插在前"表明移位运算符是1个优先级插在算。术和关系之间,即>>夕和<<."逻辑位3插在后"表明逻辑位运算符有3个优先级,&在前,-在中,|在后,它们插在关系和逻辑之间,这样,15种优先级的顺序就记住了。
算术运算符的优先级:
最高+ +、- -
-(单目运算符取负号)
*、/、%
最低+、-
- 当“/”被用于整数或字符时,结果取整。
- 模运算取整数除法的余数,所以“%”不能用于float和double类型。
- 自增或自减运算符在操作数之前(++x,x--),C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后(x++,x--),C语言就先引用操作数的值,而后再进行加1或减1操作。
- 编译程序对同级运算符按从左到右的顺序进行计算。而 + +和--的结合方向是“自右向左”。如 - i + + ,它相当于: -( i + +)。
-
-
-
注:
- 参加逻辑运算的数据类型可以是字符型,整型,浮点型。
- 优先级:
当一个逻辑表达式中包含多个逻辑运算符时按以下的优先顺序:
!(非),&&(与),||(或),即“!”是三者中最高的。
逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。
- 短路现象
n &&(与),||(或)都有短路现象
-
-
-
13、关系运算中,应避免对实数作相等或不等于0的判断
如:1.0/3.0*3.0=1.0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
14、位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了 6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short, int与long类型。
表3.8为C语言提供的位运算符列表:
位运算符表
运算符 | 含义 | 描述 |
& | 按位与 | 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 |
| | 按位或 | 两个相应的二进制位中只要有一个为1,该位的结果值为1 |
^ | 按位异或 | 若参加运算的两个二进制位值相同则为0,否则为1 |
~ | 取反 | ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 |
<< | 左移 | 用来将一个数的各二进制位全部左移N位,右补0 (a=<<2) |
>> | 右移 | 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0 (a=>>2) |
0&0=0;0&1=0;1&0=0;1&1=1;
3&5!=8,因为:00000011(3)&00000101(5)=00000001(1);
注意:如果参加&运算的是负数(如-3&-5),则要以补码的形式表示二进制数,然后再按位进行“与”运算。
右移一位相当于除以2,右移n位相当于除以2n,左移相反。
高位左移后溢出,舍弃。
15、
C语言中逻辑运算符(&&,||,!)和位运算符号(&,|,^)的区别
在C语言中,编程者经常混淆两组运算符:(&&,||,!)和(&,|,^)。第一组是逻辑运算符,它的操作数是布尔型,而第二组则是位运算符,其操作数是位序列。在布尔型操作数中,只有两个数值,0或1。C语言规定,在逻辑运算中,所有的非0数值都看做1处理。而位序列则可以是有无符号的字符型,整型,长短整型等。在位运算中,是相应的位之间进行逻辑运算。因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。通常,位运算操作数选择无符号型数据。
16、逗号运算符
< 表达式1 >, < 表达式2 >, <表达式3 >, … <表达式n >
逗号表达式的求解过程是:先求解表达式1,再求解表达式2,直到求解完表达式n,最后一个逗 号表达式的值是整个逗号表达式的值。逗号运算符又称为“顺序求解运算符”
逗号运算符是所有运算符中级别最低的
17、条件运算符
表达式1?表达式2:表达式3
- 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
- 条件运算符优先于赋值运算符
- 条件运算符的结合方向为“自右至左”。
- 通常用条件表达式取代简单的条件语句
- 条件表达是也有短路操作
18、混合运算(数据类型转换)
19、++,--操作
++,--在操作数之前,则在引用该数据之前进行自加自减操作
++,--在操作数之后,则在引用该数据之后进行自加自减操作
短路操作符
&&,||,?:
对于?:,在C中与它优先级相同的只有它自己,因此只有连续的?:才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。