二、运算符和表达式
1. 算术运算符
+,-,*,/,%
2. 自增自减运算符
运算符 含义 结果 优先级 结合性 ++i 先自增,再参与运算 先i=i+1后,再使用i的值 2 自右至左 i++ 先参与运算,再自增 先使用i值,再i=i+1 2 自右至左 –i 先自减,再参与运算 先i=i-1后,再使用i的值 2 自右至左 i– 先参与运算,再自减 先使用i值,再i=i-1 2 自右至左 int a = 10; int b; b = a++; //先b=a,再a=a+1. 结果是b=10,a=11. int c = 10; int d; d = ++c; //先c=c+1,再d=c。 结果是d=11, c=11.
3. 运算符优先级总表
[点击跳转](运算符优先级_百度百科 (baidu.com))
4. 位运算符和逻辑运算符区别
位运算符(二进制运算符) 含义 逻辑运算符 含义 << 左移 ! 逻辑非 >> 右移 && 逻辑与 ~ 按位非 || 逻辑或 | 按位或 & 按位与 ^ 按位异或 //注:首先明确,计算机中数据以补码形式存在 //1.左移:相当于*2的n次方,移几位就*2的几次方 //2.右移:相当于/2的n次方,移几位就/2的几次方 int a=10; printf("a = %d\n",a<<3);//0000 1010,左移后0101 0000,结果是80 //3.按位非(取反):~,二进制1->0,0>1,二进制最高位为符号位,0正数,1负数。见下图1 printf("c=%d",~a); //-11.10:0000 1010, 补码:0000 1010,取反:1111 0101,反码:1000 1010,补码:1000 1011=-11 int b=-7; printf(~b);//-7:1000 0111,补码:1111 1001,取反:0000 0110=6 //按位或:|,数全为正,或全为负 //按位异或:^,可以有正有负
1.所有正整数的按位取反是其本身+1的负数
2.所有负整数的按位取反是其本身+1的绝对值
3.零的按位取反是-1 (0在数学界既不是 正数也不是负数)
5. 逗号运算符
也称为 顺序求值运算符,起到分隔作用。优先级=15,结合方向自左到右。例如:int a,b,c
int a=(1,2,3,4,5); printf(a); //5
6. 条件运算符
表达式1?表达式2:表达式3
表达式1为真,执行表达式2,否则执行表达式3
printf(1>2?1:2); //2 //注意括号,否则报错:error: lvalue required as left operand of assignment,看字面意思是:赋值操作的左操作数必须使用左值。条件表达式的优先级顺序 int a=1; int b=2; (a>b)? (a=11): (b=12); //必须加括号 printf("%d",b);
7. sizeof运算符
sizeof(); 求内存大小,即字节数大小
printf("%d\n",sizeof(float)); //4字节
8.表达式
用运算符和括号将运算对象(也叫操作数)连接起来的、符合C语言语法规则、用于相关运算的式子,称为C语言表达式。
**1.运算对象包括:**常量、变量、函数等。
**2.执行规则:**按照运算符优先级顺序执行,同一级别看运算符的结合性,结合性一致的,用小括号改变运算优先级。
3.不同数据类型之间的混合运算
(1)float+double,全部转化为double类型,再进行计算;
(2)int+float 或 int+double ,先int转化为float 或double,再进行计算;
(3)char+int, 每一个char型字符都有相应的ASCII码数值对应,所以两者是可以互相转换的。计算时,一般把字符型转换成整形,再进行运算。
9.C语句
一般是由表达式和语句结束符;号组成,是构成C语言的基本单位。
C语言常见语句:
流程控制语句 函数调用语句 表达式语句 空语句 复合语句 if…else… 用于函数调用 进行运算 只有一个结束符;什么都不做 用{}括起来的语句块,多条语句的组合,方便流程语句控制多条语句 for()… printf(); a*b/c+a-e {i=3;j=4;} while()… do…while()… continue break switch return goto