C语言操作符
1.算数操作符:+ - * / %--求余数
特别的:1.%的两个操作数必须都是整数
2. /的两个操作数都为整数,运算结果为整数;若其中一个操作符为浮点数,运算结果就为浮点数。
3.+ ,-,*,/可以作用于整数,也可以作用于浮点数。
2.移位操作符:<<(左移操作符)
>>(右移操作符)
移位操作符作用对象是二进制数哦,以32位机器为例,移位操作时需要将二进制数字补全至32位,再进行移位操作。
并且计算机中存储的都是补码,遇到负数时需要将原码转化补码
<<:左移时,二进制数字整体左移,右边补0。
>>:右移分为两种情况:
算术右移: 左边补符号位,右边丢弃。
逻辑右移: 左边补0,右边丢弃。
补充一点:正数符号位为0,负数符号位为1。
特别的:在移位操作中不可以移动负数位。
3.位操作符
&:按位与
| :按位或
^ :按位异或
特别的:他们的操作对象一定是整数
位操作符作用时需要将十进制数字改写为二进制
例如:int a=6;
int b=4;
a---110
b---100
a&b---100--4
a|b-----110--6
a^b----010--2
#include
<stdio.h>
int
main()
{
int
a = 6;
int
b = 4;
printf(
"%d\n"
, a&b);
printf(
"%d\n"
, a | b);
printf(
"%d\n"
, a^b);
}
![](https://i-blog.csdnimg.cn/blog_migrate/2231ef245a710779bc05e817a2ba8fa4.png)
4.赋值操作符: =
可以给任意变量赋值
+= 例如:a=a+5 可以写成a+=5,以下同理
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
5.单目操作符:只有一个操作对象
! 逻辑反操作 例如 if(!flag)
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
++ 前置,后置++
-- 前置,后置--
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
6.关系操作符
>
>=
<
<=
!=
== 注意区分与赋值操作符=的
特别的: if( 1 <= a <= 100)---- ---这种写法是错误的
if(a >= 1 && a <= 100)---正解
7.逻辑操作符
&& 逻辑与 特点:对&&来说,当第一位出现0,后面就不必再看
|| 逻辑或 特点:对||来说,出现1,下一位就不再计算
例如:
![](https://i-blog.csdnimg.cn/blog_migrate/9b48262d8bd9c039697963182f8b24c5.png)
当a=0时,++b ,d++ 就不必再计算。
![](https://i-blog.csdnimg.cn/blog_migrate/98e590237842bd9d09ce64f3587ce412.png)
当a++||++d为1,d++就不必再算。
8.条件操作符
exp1 ? exp2 : exp3
翻译过来就是:如果exp1成立,就得得到exp2
反之,exp3成立
类似于if语句
if(exp1
)
{
exp2;
}
else
{
exp3;
}
9.逗号表达式:用逗号隔开的多个表达式
exp1,exp2,exp3,......expN
从左到右依次执行,整个表达式的值取决于最后一个表达式的值
10.下标引用,函数调用操作符
(1)[]
操作数是数组名和索引值
例如:a[6]=8;
[]的两个操作数是数组名a和索引值6
(2)()
函数调用操作符
操作数可以是多个,第一个是函数名,剩余的是传递给函数的参数
例如 fun(n) 操作数就是fun和n
(3)访问一个结构体成员
.
结构体
.
成员名
->
结构体指针->成员名