1. 算术运算符
C语言提供的算术如下表
运算符 | 功能说明 | 举例 |
---|---|---|
+ | 加法 | a+b |
- | 减法 | a-b |
* | 乘法 | a*b |
/ | 除法 | a/b |
% | 取模或取余 | a%b |
++ | 增1 | a++,++a |
-- | 减1 | a-- ,--a |
举几个运算的例子
int a = 25, b = 8,c;
c = a + b;
printf("c=%d\n",c); // c=33
c = a - b;
printf("c=%d\n",c); // c=17
c = a * b;
printf("c=%d\n",c); // c=200
c = a / b;
printf("c=%d\n",c); // c=3 运算后保留整数部分
c = a % b;
printf("c=%d\n",c); // c=1 运算后保留余数部分
c = a++; // 先赋值给c,后运算
printf("c=%d\n",c); // c=25
printf("a=%d\n",a); // a=26
c = --b; //先运算,后赋值给c
printf("c=%d\n",c); // c=7
printf("b=%d\n",b); // b=7
2. 关系运算符
C语言的关系运算符如下:
运算符 | 功能说明 | 举例 |
---|---|---|
> | 大于 | a>b |
>= | 大于等于 | a>=10 |
< | 小于 | a<3 |
<= | 小于等于 | a<=b+1 |
== | 等于 | a==100 |
!= | 不等于 | a!=0 |
举例:
int a=5,b=6,c;
//结果为真为1,假为0
c=a>(b-1) //c=0
c=(a+1)==b //c=1
c=a>=(b-3) //c=1
c=a!=b //c=1
3. 逻辑运算符
C语言的逻辑运算符如下:
运算符 | 功能说明 | 举例 |
---|---|---|
! | 逻辑非 | !(x==0) |
&& | 逻辑与 | x>0&&x<100 |
|| | 逻辑或 | y<10||x<10 |
3.1 逻辑非 "!"
逻辑非"!"运算符的运算规律如下
运算量 | 结果 |
1 | 0 |
0 | 1 |
例如:
int x=6,y;
y=!(x==0); //y=1
y=!((x-6)==0); //y=0
y=!(x<=0); //y=1
3.2 逻辑与"&&"
逻辑与"&&"运算符的运算规律如下:
左运算量 | 右运算量 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
TIPS:只有左右运算符为真,结果才为真,否则为假。
int x=5,y=10,z;
z=(x>=5)&&(y<20) //z=1
z=(x>5)&&(y<20) //z=0
z=(x>5)&&(y>20) //z=0
z=(x==5)&&(y>20) //z=0
3.3 逻辑或"||"
逻辑或"||"运算符的运算规律如下:
左运算量 | 右运算量 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
TIPS:左右运算量只要有一个为真,则结果为真。只有两者为假,结果才为假。
int a=3,b=5,c;
c=(a+1<5)||(b<10) // c=1
c=(a+1>=5)||(b!=10) // c=1
c=(a+1<5)||(b==10) // c=0
4. 位运算符
C语言的位运算符如下:
运算符 | 功能说明 | 举例 |
---|---|---|
~ | 位逻辑反 | ~a |
& | 位逻辑与 | a&b |
| | 位逻辑或 | a|b |
^ | 位逻辑异或 | a^b |
>> | 右移位 | a<<1 |
<< | 左移位 | b>>3 |
4.1 位逻辑反"~"
通过实例来理解:
char x=0x17,y; //定义一个16进制数
y=~x;
在计算机内存中,将x转化为二进制数:
0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
y赋值后在计算机内存中如下:
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
4.2 位逻辑与"&"
位逻辑与"&"运算符运算规律如下:
左运算量位值 | 右运算量位值 | 位与结果值 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
TIPS:只有左右运算符为1,结果才为1,否则为0。
通过例子来加深理解
int x = 0x97,y = 0xba,z;
z=x&y;
将x,y转化为二进制数并运算:
左运算量z | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
右运算量y | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 |
结果z | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
最后z的值为0x92。
4.3 位逻辑或"|"
位逻辑或“|”运算符的运算规律如下:
TIPS:左右运算只要有一个为1,结果就为1,两者为0结果则为0。
例如:
int x = 076,y = 0x89,z;
z=x|y;
将x,y转化为二进制数并运算:
左运算量x | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
右运算量y | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
结果z | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
z的赋值结果为:0xbf
4.4 位逻辑异或"^"
位逻辑异或“^”运算符的运算规律如下:
TIPS:左右运算量位值相同时,结果为0,不同则为1。
例如:
int x = 72,y = 0152,z;
z=x^y;
将x,y转化为二进制数并运算:
左运算量x | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|---|
右运算量y | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
结果z | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
z的赋值结果为041
4.5 位移位运算"<<" ">>"
位移位运算的一般形式:<运算量> <运算符> <表达式>
TIPS:<运算量> 必须为整型结果数值;
<运算符>为左移位(<<)或 右移位(>>)运算符;
<表达式> 也必须为整型结果数值。
举个例子:
int a = 0xe4,b;
b=a<<3; //将a向左移三位
a | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
---|---|---|---|---|---|---|---|---|
结果 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
向左移动三位,左边三位舍去,其余位补0。
5. 赋值运算符
赋值运算符为“=”,其运算的一般形式如下:
<左值表达式> = <右值表达式>
赋值复合运算符其运算的一般形式如下:
<变量><操作符>=<表达式>
例如: a+=b 等价于 a=a+b
a&=b 等价于 a=a&b
6. 特殊运算符
6.1 条件运算符"?"
是三目运算符,其运算的一般形式是:
<表达式1> ?<表达式2> :<表达式3>
若“表达式1”为真(非零)则执行并返回“表达式2”的值;如果“表达式1”为假(零),则执行并返回“表达式3”的值。
例如:
int x=82, y=101;
x >= y ? x+18 : y-100 //运算结果为1
x < (y-11) ? x-22 : y-1 //运算结果为60
6.2 sizeof运算符
sizeof是一个用于计算数据类型或变量占用字节大小的运算符
运算的一般形式:sizeof(<类型或变量名>)
注意:它只针对数据类型,而不针对变量!
例如:
int i;
sizeof(i); //正确编译 i的类型为int 等价于sizeof(int)
sizeof i; //正确编译
sizeof(int); //正确编译
sizeof int; //报错
7. 运算符的优先级
各个符号的运算优先级如下表: