4.运算符表达式和语句
运算符表达式和语句
1.基本运算符
-
=
- 数据对象:泛指数据在内存的存储区域
- 左值:表示可以被更改的数据对象
- 右值:能赋给左值的量
#include <stdio.h> int main(){ int x = 10 ;//这个就是正常的赋值,左值指x,右值指10; //int 10 = y ;//10无法作为变量,也就是无法成为左值,左值(即变量)需是字母开头。 //右值要能赋值给左值的话,需是数字。 //或者如果是char类型的话,可以用它的常量来赋值,如 //char x10='y'; return 0; } -
+:加
-
-:减
-
*:乘
-
/:除
-
在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有浮 点数参与运算,系统会将整数数据隐形类型转换为浮点类型,最终得到的结果会是一个浮点数。例如, 2510/1000 属于整数之间相除,会忽略小数部分,得到的结果是 2,而 2.5/10 的实际结果为 0.25。
例如 3500/1000*1000 //它的结果是3000,因
-
-
%:取余数
#include <stdio.h> int main(){ int a = 10;// printf("%d\n",a+1); //结果 11 ,因为 10 + 1 == 11 printf("%d\n",a-1); //结果 9 ,因为 10 - 1 == 9 printf("%d\n",a*2); //结果 20 ,因为 10 * 2 == 20 printf("%d\n",a/2); //结果 5 ,因为 10 / 2 == 5 printf("%d\n",a%8); //结果 2 ,因为 10 / 8 == 1 ,还剩 2 没除完 while(1);//卡屏 return 0; } -
++:自加1
- i++先计算表达式的值,然后在++(加一)
- ++i是先++(加一),在计算表达式的值
-
--:自减1
#include <stdio.h> int main(){ int a = 10; printf("%d\n",a++);//这个的运行结果是10 printf("%d\n",++a);//这个的运行结果是12 return 0; /*为什么会是这样的?++不是加1么? 因为printf("%d\n",a++);可以表示为 printf(“%d\n”,a); a = a+1; 而printf("%d\n",++a);则是 a = a+1; printf("%d\n",a); */ //--可以和++同样的理解。 }赋值运算符
+=:加等于
-=:减等于
*=:乘等于
/=:除等于
%=:取余等于
#include <stdio.h> int main(){ printf("%d\n",a+=5);//赋值运算,结果 15 ,因为 a = 10+5 == 15 printf("%d\n",a-=5);//赋值运算,结果 10 ,因为前面的a = 15,a = 15-5 == 10 printf("%d\n",a*=2);//赋值运算,结果 20 ,因为 a = 10 , a = 10*2 == 20 printf("%d\n",a/=2);//赋值运算,结果 10 ,因为 a = 20 , a = 20/2 == 10 printf("%d\n",a%=8);//赋值运算,结果 2 ,因为 a = 10 , a = 10/8 == 1 剩 2 while(1); return 0; } -
逗号运算符
int a=2; int b=3; int c=4; int d=5; int i=(a=b,c+b); //逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值比较运算符
1、等于: ==
2、不等于: !=
3、大于: >
4、小于: <
5、大于等于:>=
6、小于等于:<=在c语言中,真用 1 表示,假用 0 表示,
#include <stdio.h> int main(){ printf("%d\n",10 == 5); return 0; }//显示结果为0,因为这是10不等于5,所以为假,所以会用0表示逻辑运算符
! 非 !a 如果 a 为假,则!a 为真; 如果 a 为真,则!a 为假
&& 与 a&&b 如果 a 和 b 都为真,则结果为真否则为假
|| 或 a|| b 如果 a 和 b 有一个或以上为真,则结 果为真,二者都为假时,结果为假
#include <stdio.h> int main(){ int a = 10 ; printf("%d\n",!a); return 0; }//显示结果为0,因为a = 10 是真,加感叹号,变为假,所以显示结果为0//比较运算符与逻辑运算符的运用 #include <stdio.h>//逻辑运算符与比较运算符结合 int main(){//我们做一个分数判定 //优秀(大于90分),良好(90-75),及格(60分以上),不及格(60分以下)的系统 int score = 0;//分数这个变量的命名 scanf("%d", &score);//if else 是一个判定语句。 if (score >= 90 && score <= 100){//判定优秀的成绩为大于等于90,小于等于100 printf("优秀\n"); } else if (score < 90 && score >= 75){//判定良好的成绩为小于90,大于等于75 printf("良好\n"); } else if (score >= 60 && score < 75){//判定及格的成绩为大于等于60,小于等于75 printf("及格\n"); } else if (score < 60 && score >= 0){//判定不及格的成绩为小于60,大于等于0 printf("不及格\n"); } else{//其他的情况,比如输入的 -1 啊,或者 100 以上啊。 printf("没有这种成绩\n"); } return 0; }//了解即可位运算符
位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字 0 和 1 进行操作的。C 语言中 的位运算符及其范例如下所示
运算符 运算 范例 结果
& 按位与 0 & 0 0
0 & 1 0
1 & 1 1
1 & 0 0
| 按位或 0 | 0 0
0 | 1 1
1 | 1 1
1 | 0 1
~ 取反 ~0 1
~1 0
^ 按位异或 0 ^ 0 0
0 ^ 1 1
1 ^ 1 0
1 ^ 0 1
<< 左移 00000010<<2 00001000
10010011<<2 01001100
>> 右移 01100010>>2 00011000
11100010>>2 11111000
#include <stdio.h>//按位与
int main(){
printf("%d\n",10 & 5);
return 0;
}
/*结果是0,为什么?
看下面的二进制就清楚了
10的二进制是 0000 1010
5的二进制是 0000 0101
与的话是一一对应的,比如第一位是0和1,那么与就是假,就是0;
同理可得其他三位,就都是0。
所以叫 按位与 按二进制的位来逻辑判断*/
printf("%d\n",11 & 9);
//那么上面的结果会是什么呢?
//11: 0000 1011
//9: 0000 0111
//&得 0000 0011
-
按位与 有一位是0,那一位就是0。
-
按位或 有一位是1,那一位就是1。
-
~ 取反 取反操作是将原码取补码,然后01互换,之后再将补码转换成原码输出
#include <stdio.h>//按位与
int main(){
int a=11;
printf("%d\n",~a);
return 0;
}/*11的取反操作:
原码:0000 1011
第一位为0,那么根据三码合一,他的补码为 0000 1011
取反(即01互换而且按照补码的形式存在计算机中):1111 0100
转换为反码:1000 1011
转换为原码:1000 1100
转换成10进制为:-12
-10的取反操作:
原码:1000 1010
第一位为1,那么它的反码为:1111 0101 它的补码为:1111 0110
取反(即01互换而且按照补码的形式存在计算机中):0000 1001
符号位为0,那么它的原码也是一样的:0000 1001
转换成10进制为:9
*/
- ^ 按位异或:
#include <stdio.h>
int main(){
printf("%d\n", 10^7);
return 0;
}
/* 10: 0000 1010
7 : 0000 0111
10^7 0000 1101
也就是在二进制中,在这一位同为1或0取0,不同取1
*/
左移:<<
右移:>>
#include <stdio.h>
int main(){
int x = 10;
printf("%d\n", x << 2);//结果是40
/*10的二进制:
0000 1010
左移后 0010 1000
*/
printf("%d\n", x >> 2);//结果是2
/*10的二进制:
0000 1010
右移后 0000 0010
*/
return 0;
}
?:这个是叫三目运算符,与if else类似
#include<stdio.h>
int main(){
int a;//定义分数
printf("输入你考试的分数\n";
scanf("%d", &a);//输入分数
(a >= 60 ? printf("恭喜你!!!\n") : printf("噢,恭喜你获得混合双打套餐!祝你好运\n"));
//达到60分的输出与没达到60分的输出
return 0;
}
为什么叫三目因为,(第一段是判断条件)? (判断正确:结果1) : (判断错误:结果2)
运算符优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ++(后缀),--(后缀),()(调用函数),{}(语句块),.,-> | 从左到右 |
| 2 | ++(前缀),--(前缀),+(前缀),-(前缀),!(前缀),~(前缀),sizeof,*(取指针值),&(取地址),(type)(类型转化) | 从右到左 |
| 3 | *, /, % | 从左到右 |
| 4 | +,- | 从左到右 |
| 5 | << >> | 从左到右 |
| 6 | < > <= >= | 从左到右 |
| 7 | == != | 从左到右 |
| 8 | & | 从左到右 |
| 9 | ^ | 从左到右 |
| 10 | | | 从左到右 |
| 11 | && | 从左到右 |
| 12 | || | 从左到右 |
| 13 | ?:(三目运算符) | 从右到左 |
| 14 | =,*=,%=,+=,-=,<<=,>>=,&=,|=,^= | 从右到左 |
| 15 | ,(逗号运算符) | 从左到右 |
- 复合语句
- {}代码块
- 空语句
- 只有一个;号的语句就是空语句,空语句在C语言里面和合法的,并且是在某些场合必用的
- 类型转换
- 隐式转换
- 强制转换

浙公网安备 33010602011771号