运算符和表达式
表达式
运算符
1 2 3 4 5 6 7 8 9 10 11 12 13
| 按功能分类: 算数运算符 逻辑运算符 :! && || 条件运算符 :? : 关系运算符 位(二进制):~ (按位反,即0变1,1变0) & | ^ 异或(异或:a^b对应不同为1,相同为0) 移位:>> 向右 << 向左 逗号 其他 sizeof() &(取地址符) * 按操作数的多少: 单目 + - ++ -- ! & ~ * 双目 除了三目和单目都是双目 三目 ? :
|
运算符的两个属性
1 2 3 4
| 优先级:是指运算符结合操作数的先后顺序,优先级高的优先结合操作数。 结合性:在优先级相同时来决定操作数与左边的运算符结合,还是与右边的运算符结合。 左结合性:从左边向右结合 除了单目,条件和赋值。 右结合性:从右向左结合:单目,条件,赋值。
|
算数运算符
逻辑运算符
1 2 3
| 运算符:! && || 。 逻辑运算符结果一定是逻辑型(true , false)。 优先级: ! 高于 &&和||。
|
函数的参数计算顺序
1 2 3 4 5 6 7 8 9
| 从左向右。 关系运算符有: > < >= <= == != 关系运算符的规则: 都是双目。 运算时就是比较大小,结果都是逻辑值真(非零)或假(零)。 优先级 < > <= >= 高于 == != 表达式计算的过程: 先看表达式中的运算符优先级,优先级高的优先结合操作数,加层括号。 计算机从左到右依次计算。
|
赋值运算符
1 2 3 4 5
| 赋值运算符左右两侧的类型可以不同,但赋值时要发生类型转换 转换的规则: 将浮点数赋值给整数型,自动舍弃小数部分。 将整型赋给浮点型,则以浮点型形式存放
|
逗号运算符
1 2
| 语法:表达式1,表达式2,表达式3,…… ,表达式n 最后的表达式结果最为最终结果
|
运算符的优先级总结
1 2 3 4 5
| 后缀运算符:[] () · -> ++ --(类型名称){列表} 单目高于双目和三目 算术运算符 > 移位运算符 > 关系运算符 > 逻辑运算符 > 条件运算符 > 赋值运算符 逗号运算符最低
|
数据类型
程序的开发过程
1 2 3 4
| 写代码 ,存成.C文件 编译:生成.obj目标文件 链接:多个obj文件连成一个文件.exe 执行
|
数据类型
作用:用来决定对应类型的数据在内存中占据空间的大小
数据类型的分类
一、整型:
1 2 3
| short(2个字节) int(4个字节) long(4个字节) 有符号整型 :signed int 无符号整型 :unsigned int
|
数据在内存的存放方式:
存放的是数的二进制形式,且是二进制的补码形式。
系统用空间的最高位表示符号位,0为正,1为负。
补码的计算:
在原码的基础上,保留符号位然后取反加1
例如:
原码: 1000000000111 补码:1(符号位不变)111111111000+1 = 1111111111001
总结:
内存中永远存的是数据的补码,但是正数的补码和原码相同,负数的补码需要计算
两个字节空间存储数据的范围
一个字节空间存储的数据范围
无符号两个字节空间范围
无符号一个字节空间范围
整型常量与变量:
整型常量:
1.十进制整型
2.八进制整型 (以O开头,且由07组成)
3.十六进制整型 (以OX开头,且由09,af/AF)
整型变量:
……
二、浮点型:
1 2
| float(4位单精度) double(8位双精度)
|
浮点型常量:
1.十进制小数
2.指数形式 (aEb,aeb;a为尾数,b为指数)
例如:1.5E2等价1.5乘以10的2次幂
浮点型常量的说明:
1.浮点数默认类型是double
2.指数形式下,a与b的值都不能省略,且b必须为整数
例如:2.5E2.0 is error
三、字符型:
字符常量:
1.普通字符:用单引号括起来的一个字符。
例如: ‘a’ ‘b’
2.转义字符:用\开头,将其他字符转出特定的含义,也用单引号
例如: ‘\n’ 把字符n转译 为回车
(1) ‘\ddd’用一到三位的八进制数组成的一个转义字符。字符在内存的存放形式是该字符的ASCII值
‘a’ = 97 ‘A’ = 65 ‘o’ = 48 ‘\0’ = 0
(2) ‘\xhh’用以\x开头,且以1~2位的十六进制组成的一个转义字符
例如:’\xaa’ , ‘\xb’
注意:
- ‘' 斜杠不是字符只是转义字符的标志
- ‘\128’ 不是转义字符(详情,看字符长量的转义字符(1))
- ‘12’ 也不是字符(单引号的数字字符之允许是0~9)
字符串常量:
用双引号括起来的0到多个字符组成的序列
例如: “abd” , “ld”
说明:字符串中系统会用’\0’字符作为字符串结束的标志符
理解字符串的两个概念:
1 2 3
| 1.字符串的长度:从前向后数,首次遇到'\0'字符前的字符个数可以用strlen()来计算 2.字符串占用空间的大小:所有字符都需要占用内存空间,可以用sizeof()运算符来计算 注意:sizeof()不是函数,是运算符
|
例题:
1 2 3 4
| 1.printf("%d",strlen("ab\123d")); 结果:输出4 2.printf("%d",strlen("ab\128d")); 结果:输出5
|
实现大小写字母的转换,加减32
1 2 3 4
| char ch = 'a'; //a = 97 sh = ch-32; printf("%c",sh); 结果:A
|
数字字符与数字的转换,加减48
1 2 3
| char ch = '1'; //'1' = 49 printf("%d",ch); // 49 printf("%d",ch-48); // 1
|
符号常量:
用#define可以定义符号常量
四、数据类型的转换:
整型,浮点型,字符可以混合运算,运算中如果运算符左右两侧数据类型不同,则先要进行数据类型转换,在运算
五、数据类型转换的分类:
1.系统自动转换:将范围小的、精度低的数据类型转换为范围大的、精度高的类型(就高不就低)
2.强制转换 (语法格式:(类型)表达式)
精度从小到大排序如下:
1
| short char int || long || float double
|
注意: