抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

运算符和表达式

表达式

1
表达式: 用运算符和操作数组成的合法的式子。

运算符

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
优先级: 单目 > 双目 > 三目。

逻辑运算符

1
2
3
运算符:!   &&   || 。
逻辑运算符结果一定是逻辑型(truefalse)。
优先级: ! 高于 &&和||。

函数的参数计算顺序

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
-32768 ~ 32767

一个字节空间存储的数据范围

1
-128 ~ 127

无符号两个字节空间范围

1
0 ~ 65535

无符号一个字节空间范围

1
0 ~ 255

整型常量与变量:
整型常量:
1.十进制整型
2.八进制整型 (以O开头,且由07组成)
3.十六进制整型 (以OX开头,且由0
9,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
char(一个字节)

字符常量:
1.普通字符:用单引号括起来的一个字符。
例如: ‘a’ ‘b’
2.转义字符:用\开头,将其他字符转出特定的含义,也用单引号
例如: ‘\n’ 把字符n转译 为回车
(1) ‘\ddd’用一到三位的八进制数组成的一个转义字符。字符在内存的存放形式是该字符的ASCII值
‘a’ = 97 ‘A’ = 65 ‘o’ = 48 ‘\0’ = 0
(2) ‘\xhh’用以\x开头,且以1~2位的十六进制组成的一个转义字符
例如:’\xaa’ , ‘\xb’
注意:

  1. ‘' 斜杠不是字符只是转义字符的标志
  2. ‘\128’ 不是转义字符(详情,看字符长量的转义字符(1))
  3. ‘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 

注意:

1
(int)2.5/2 是把2.5强制转换