4.运算符与表达式
2018-09-22 本文已影响68人
luowenbin
变量 与 变量或常量 可以进行运算 组成表达式。
一、算术运算符
运算符 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增 |
-- | 自减 |
1.基本算术运算
前5个基本含义和数学上相同
不同的是:
整型除以整型结果还是整型,小数部分直接去掉
即 5/2
的结果是2
,不是2.5
,也不是3
想要得到小数部分就要用 浮点型
即 5.0/2.0
的结果才是2.5
#include <stdio.h>
int main() {
int a = 100;
int b = 6;
printf("a + b == %d\n", a+b );
printf("a - b == %d\n", a-b );
printf("a * b == %d\n", a*b );
printf("a / b == %d\n", a/b );
printf("a %% b == %d\n", a%b );//输出%要用%%
return 0;
}
2.自增自减运算
自增与自减同理,所以这里只说自增。
变量的自增运算就是变量本身+1
单独使用时这4条语句是一样的:
++a;
,a++;
,a=a+1;
,a+=1;
(a为变量)
混和其他运算符一起使用时有区别:
前置:++a
先自增再运算
后置:a++
先运算再自增
例如:
c=++a;
等价于a++; c=a; //自增;赋值;
c=a++;
等价于c=a; a++; //赋值;自增;
#include <stdio.h>
int main() {
int a = 100;
int b = 6;
int c=0;
printf("自增自减(单独作为语句使用)\n");
printf("a == %d b == %d\n", a,b );
a++;
b--;
printf("a == %d b == %d\n", a,b );
printf("\n\n");
printf("自增自减(嵌套使用)\n");
printf("a == %d\n", a );
c=a++;//先赋值a的值给c,a再自增,所以c的是自增前的a
printf("c == %d,a==%d\n", c,a);
c=++a;//a先自增,再赋值a的值给c,所以c的是自增后的a
printf("c == %d,a==%d\n", c,a);
return 0;
}
二、赋值运算符
运算符 | 含义 | 举例 |
---|---|---|
= | 赋值 |
i=5; 表示 设置变量i的值为5 |
+= | 相加后赋值 |
i+=5; 等同于i=i+5
|
-= | 相减后赋值 |
i-=5; 等同于i=i-5
|
*= | 相乘后赋值 |
i*=5; 等同于i=i*5
|
/= | 相除后赋值 |
i/=5; 等同于i=i/5
|
%= | 取余后赋值 |
i%=5; 等同于i=i%5
|
三、关系运算符
关系运算符的运算结果只有两种 1
(代表真)和 0
(代表假)
运算符 | 含义 | 举例 |
---|---|---|
== | 是否相等 |
5==5 的结果为1
|
!= | 是否不等 |
5!=5 的结果为0
|
> | 是否大于 |
6>5 的结果为1
|
< | 是否小于 |
6<5 的结果为0
|
>= | 是否大于或等于 |
4>=5 的结果为0
|
<= | 是否小于或等于 |
4<=5 的结果为1
|
注意区分
=
和==
,分别是 赋值 和 比较是否相等。
#include<stdio.h>
int main() {
int a=0,b=999,c;
printf("%d\n",4>5);//0
printf("%d\n",6>5);//1
printf("%d\n",a>=0);//1
printf("%d\n",a!=b);//1
c= (6>5);
printf("%d\n",c);//1
c= (b==999);
printf("%d\n",c);//1
return 0;
}
四、逻辑运算符
运算符 | 含义 | 举例 |
---|---|---|
| | | 或:有一个为真,运算结果就为真 |
1||0 的值为1
|
&& | 且:同时为真,运算结果才为真 |
1&&0 的值为0
|
! | 非:真变成假,假变成真 |
!0 的值为1
|
#include<stdio.h>
int main() {
/* 或且非 随便挑一个意思理解
和数学上集合的 并集,交集,补集 差不多。
和物理上: “或” 像 开关并联,“且” 像开关串联,也差不多。
*/
int a=0,b=999,c;
//判断b是否大于5 或者 a<10 有一个满足 结果就是1 , 一个都不满足 结果就是0
printf("%d\n",a>5||a<10);//1
//判断b是否在0到100
printf("%d\n",b>0&&b<1000);//1
//判断b是否为0,1,2
printf("%d\n",b==0||b==1||b==2);//0
return 0;
}
六、位运算符
数值在计算机中是以二进制存储的。
如 42对应二进制为00101010
,其中的每一个1或0 叫做一个位
运算符 | 含义 | 示例 |
---|---|---|
<< | 左移位:将数字的二进制每一个位左移 |
00101010<<1 的值为01010100
|
>> | 右移位:将数字的二进制每一个位右移 |
00101010<<1 的值为00010101
|
& | 与:两个位为1时,结果位才为1 |
00101010 & 10101010 的值为00101010
|
| | 或:有一个位为1,结果位就为1 |
0110 丨1100 的值为1110
|
~ | 取反:1变成0,0变成1 |
^100 的值为011
|
^ | 异或:相同为1,不同为0 |
0011^1110 的值为0010
|
#include<stdio.h>
int main() {
int a=0,b=999,c;
//判断b是否大于5 或者 a<10 有一个满足 结果就是1 , 一个都不满足 结果就是0
printf("%d\n",a>5||a<10);//1
//判断b是否在0到100
printf("%d\n",b>0&&b<1000);//1
//判断b是否为0,1,2
printf("%d\n",b==0||b==1||b==2);//0
return 0;
}
六、运算符嵌套
就是几个运算符组合成一个语句。
就像小学混合四则运算一样。
那么他们运算就有先后顺序
如 a=b!=4
实际上是a = ( b!=4 )
也就是先判断b!=4
然后再赋值给a
而不是先赋值再判断。
不想记就尽量把语句拆开用。
下一篇:C语言程序的基本结构