|
目录
?
一、算数操作符
二、移位操作符
三、位操作符
四、赋值操作符
五、单目操作符
六、关系操作符
七、逻辑操作符
八、条件操作符
?九、逗号表达式
十、下标引用,函数调用,结构成员
十一、操作符的优先级
你是否觉得C语言中的操作符就像一个与你相距万里的陌生人,对它感觉很陌生,不太会使用

下面就来讲讲如何让你和它做好朋友
一、算数操作符
1.加法操作符+
int a=2+3//右边的2和3相加后赋值给整形变量a,所以a的值为5
2.减法操作符-
int a=3-2//右边的3和2相减后赋值给整型变量a,所以a的值为1
3.乘法操作符*
int a=2*3//右边的3和2相乘后赋值给整型变量a,所以a的值为6
4.除法操作符/
int a=7/3//右边7除以3 商2余1,将商赋值给整型变量a,所以a的值为2
5.求余操作符%
int a=7%3//右边7模3 商2余1,将余数赋值给整型变量a,所以a的值为1
二、移位操作符
1.左移操作符<<
以该数字的补码向左移动相应的位数,高位舍弃,低位补0,其结果相当于乘于2的n次方,n为左移的位数
2.右移操作符>>
以该数字的补码向右移动相应的位数
如果是带有符号位进行移位,低位舍弃,在其高位补充原符号位,即正数补0,负数补1
如果是没带符号位进行移位,低位舍弃,在其高位补0,相当于除以2的n次方
三、位操作符
#include<stdio.h>
int main()
{
int a = 7;
int b = 11;
printf("a&b=%d\n",a&b);
printf("a|b=%d\n",a|b);
printf("a^b=%d\n",a^b);
return 0;
}
运行结果如下:
a&b=3
a|b=15
a^b=12
将a和b转化成二进制,对齐a和b的位数后再进行比较
1.按位与&
相同的位数两者都为1则按位与才为1,否则为0
2.按位或|
相同的位数两者之中只要有一者为1则按位或才为1,否则为0
3.按位异或^
相同的位数两者之中只要数字不同则按位异或才为1,两者数字相同则为0
最后再将按位与后的二进制结果转化为十进制
四、赋值操作符
1.=
例如:
定义一个整型变量a对其赋值5
int a=5;
2.+=,-=,*=,/=,&=,|=,^=
例如:
a+=7;相当于a=a+7;
a<<=2;相当于a=a<<2;
其他的赋值操作符都一样
五、单目操作符
1.!
该操作符为逻辑反操作符,能够将非0值转化为0,将0转化为1,即真变假,假变真
#include<stdio.h>
int main()
{
int flag=0;
while(!flag)//!flag为1,1为真,进入循环
{
printf("Hello\n");
break;
}
return 0;
}
2.~
按位取反操作符能够将二进制的数字1变成0,0变成1,符号位也会改变
3.++,--
前置++:先++,后使用.
#include<stdio.h>
int main()
{
int a=10;
int b=++a;
printf("a=%d b=%d\n",a,b);//a=11 b=11
return 0;
}
后置++:先使用,后++.
#include<stdio.h>
int main()
{
int a=10;
int b=a++;
printf("a=%d b=%d\n",a,b);//a=11 b=10
return 0;
}
--和++一样的用法
4.sizeof也是一个操作符,并不是函数,用来计算操作数的类型长度(单位:字节)
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(int));//4个字节
printf("%d\n", sizeof(short));//2个字节
printf("%d\n", sizeof(long));//4个字节
printf("%d\n", sizeof(long long));//8个字节
printf("%d\n", sizeof(float));//4个字节
printf("%d\n", sizeof(double));//8个字节
return 0;
}
5.(类型)为强制类型转换操作符
有的浮点型数据用%d打印十进制的数字就会丢失数据,就要将浮点型数据强制转换成整型数据
6.&和*
&为取地址操作符,在进行输入数据的时候就要加上,有了地址才能将数据通过键盘输入进去,如果操作数p的类型为M,则表达式&p为指向M类型的指针
*为解引用操作符,也叫取值操作符,它的操作数必须为指针,如果p为指针,则*p为p指向的对象或函数,当是指向对象时,*p即为左值
如果p为一个整形变量,例如:int p=2;则*&p相当于p,&*p却是非法的,因为*p相当于取了一个内存地址为2的值
7.正值+,负值-
int a=10;
int b=-a;
b就等于-10
六、关系操作符
>,>=,<,<=,==,!=
可以用来比较大小和判断条件是否成立
例如:
#include<stdio.h>
int main()
{
int a=10;
if(a<10)
printf("Hello\n");
else
printf("hehe\n");
return 0;
}
运行结果:
hehe
==意思为相等,写代码的时候漏了个=就得不到想要的结果
int a=5; if(5==a) 如果将数字放左边变量放右边的话,编译器就会报错就能发现少写了一个=
!=为不等于的意思
七、逻辑操作符
1.逻辑与&&
&&的左右两边的条件都需要成立才能执行
例如:
#include<stdio.h>
int main()
{
int a=5;
int b=4;
if(a==5&&b==4)//需要两边都为真才可以执行
printf("hehe\n");
return 0;
}
运行结果:
hehe
2.逻辑或||
||的左右两边条件只需一边成立即可执行
例如:
#include<stdio.h>
int main()
{
int a=5;
int b=1;
if(a==5||b==4)
printf("Hello");
return 0;
}
运行结果:
Hello
八、条件操作符
条件操作符也叫三目操作符
表达式1?表达式2:表达式3
看表达式1是否成立,如果成立的话执行表达式2,不成立的话执行表达式3
例如: ?
#include<stdio.h>
int main()
{
int a=3;
int b=7;
int c=0;
c=a>b?a:b;//如果a>b的话则c=a,否则c=b
printf("c=%d\n",c);
return 0;
}
运行结果:
c=7
?九、逗号表达式
表达式1,表达式2,表达式3……表达式N
表达式从左向右依次进行计算,整个表达式的结果为最后一个表达式的计算结果
例如:
#include<stdio.h>
int main()
{
int a = 10;
int b = 4;
int c = 1;
int d = (a += b, b -= c, c = b + 1, c =a+c+1);
printf("d=%d\n", d);
return 0;
}
运行结果:
d=19
十、下标引用,函数调用和结构成员
[]为下标引用操作符,用于数组当中,操作数为数组名和下标
例如:
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("arr数组中下标为3的值为%d\n",arr[3]);
return 0;
}
运行结果为:
arr数组中下标为3的值为4
数组的下标从0开始
函数调用操作符(),操作数为函数名和()里的内容
例如:
max(int n,int m)
{
return n>m?n:m;//如果n大于m返回值为n,否则返回m
}
#include<stdio.h>
int main()
{
int a=3;
int b=7;
int c=max(a,b);//调用函数max,将a和b的值传过去
printf("c=%d\n",c);
return 0;
}
运行结果:
c=7
点运算符.和箭头操作符->可以选择结构或联合中的成员
.和->的左边必须为结构或联合,右边必须为结构或联合中的成员
十一、操作符的优先级
| 优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 | | 1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | | | () | 圆括号 | (表达式)/函数名(形参表) | | | . | 成员选择(对象) | 对象.成员名 | | | -> | 成员选择(指针) | 对象指针->成员名 | | | 2 | - | 负号运算符 | -常量 | 右到左 | 单目运算符 | | (type) | 强制类型转换 | (数据类型)表达式 | | | ++ | 自增运算符 | ++变量名 | 单目运算符 | | -- | 自减运算符 | --变量名 | 单目运算符 | | * | 取值运算符 | *指针变量 | 单目运算符 | | & | 取地址运算符 | &变量名 | 单目运算符 | | ! | 逻辑非运算符 | !表达式 | 单目运算符 | | ~ | 按位取反运算符 | ~表达式 | 单目运算符 | | sizeof | 长度运算符 | sizeof(表达式) | | | 3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 | | * | 乘 | 表达式*表达式 | 双目运算符 | | % | 余数(取模) | 整型表达式%整型表达式 | 双目运算符 | | 4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 | | - | 减 | 表达式-表达式 | 双目运算符 | | 5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 | | >> | 右移 | 变量>>表达式 | 双目运算符 | | 6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 | | >= | 大于等于 | 表达式>=表达式 | 双目运算符 | | < | 小于 | 表达式<表达式 | 双目运算符 | | <= | 小于等于 | 表达式<=表达式 | 双目运算符 | | 7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 | | != | 不等于 | 表达式!= 表达式 | 双目运算符 | | 8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 | | 9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 | | 10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 | | 11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 | | 12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 | | 13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 | | 14 | = | 赋值运算符 | 变量=表达式 | 右到左 | | | /= | 除后赋值 | 变量/=表达式 | | | *= | 乘后赋值 | 变量*=表达式 | | | %= | 取模后赋值 | 变量%=表达式 | | | += | 加后赋值 | 变量+=表达式 | | | -= | 减后赋值 | 变量-=表达式 | | | <<= | 左移后赋值 | 变量<<=表达式 | | | >>= | 右移后赋值 | 变量>>=表达式 | | | &= | 按位与后赋值 | 变量&=表达式 | | | ^= | 按位异或后赋值 | 变量^=表达式 | | | |= | 按位或后赋值 | 变量|=表达式 | | | 15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
终于写完了,操作符的讲解到此就结束啦,你是不是对其有了更多的认识呢

?
|