初识操作符

算术操作符

1
+  -  *  /  %(取余)

位移操作符

1
>> <<

位操作符

1
&  ^  |

赋值操作符

1
= += -= *= /= &= ^=  |=   >>=  <<=

单目操作符

1
2
3
4
5
6
7
8
9
10
!           逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

算术操作符

算术操作符没什么好说的,就是简单的四则运算,但会有一些初学时的误区

1
2
3
4
5
6
int main()
{
int a = 9/2;
printf("%d\n", a);
return 0;
}

结果是4

为什么不是4.5呢?是因为用的整型int吗?试着改成float

1
2
3
4
5
6
int main()
{
float a = 9/2;
printf("%f\n", a);
return 0;
}

结果是4.0000

已经都换成了浮点数,为什么还是不行呢?

是因为/两边都是整数,就会进行整数除法,而两边任意一侧是小数,就会进行小数除法

1
2
3
4
5
6
int main()
{
float a = 9/2.0;
printf("%f\n", a);
return 0;
}

结果是4.5

位移操作符

位移操作符就是将数字转化成二进制位,在进行左移右移的操作符

1
2
3
4
5
6
7
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n", b);
return 0;
}

结果是4

为什么呢?

是因为,1个整形,相当于4个字节,而每个字节又相当于8bit,因此2这个整形相当于占用了32个字节,因此2在整形中二进制位的表示是,00000000000000000000000000000010

如图所示,所以结果是4

赋值操作符

理解起来很简单,可以进行复合赋值,直接展示

1
2
3
int a = 1;
a = 1 + 1 //完全等于 a += 1
//以此类推

单目操作符

单目操作符就是只需要有1个操作数的操作符,因此我们之前看到的那些就可以称为,双目操作符

!逻辑反操作

真变假,假变真

在C语言中,0为假,非0为真

1
2
3
4
5
6
int main()
{
int a = 10;
printf("%d\n", !a);
return 0;
}

因此,输出结果是0

1
2
3
4
5
6
int main()
{
int a = 0;
printf("%d\n", !a);
return 0;
}

输出结果为1