【C】操作符详解


今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.单目操作符
6.关系操作符
7.逻辑操作符
8.逗号表达式
9.条件操作符
9.下标引用,函数调用和结构成员

接下来给大家详细介绍!

算术操作符

+ - * / %

其中加法和减法和数学中的一样,乘法在C语言中是*表示的,剩下的也和数学中是一样的。
在C语言中除法分为整数除法和小数除法,整数除法/两遍都得是整数,而小数除法/两边只要有一个小数就可以了。列如:

#include <stdio.h>

int main()
{
    
    
	printf("%d\n", 2 / 3);
	printf("%lf\n", 2 / 3.0);
	printf("%lf\n", 2.0 / 3.0);
	printf("%lf\n", 2.0 / 3);
	return 0;
}

代码运行结果:
在这里插入图片描述
还有一个%取余操作符,就是求余数,这个操作符需要注意的事,符号两边都必须是整数,不可以是浮点数!

移位操作符

<< 左移操作符
>> 右移操作符

移位操作符操作的是我们的二进制位,所以在这里给大家补充一个知识点,原码、反码、补码。
对于一个有符号的整数来说,二进制为的最高位为符号位。
正数的原码、反码、补码都相同。
负数的原码就是按二进制的形式写出来就行。反码就是符号位不变,剩下的按位取反,补码就等于反码加1。

左移操作符就是所有的二进制位向左移动,左边的丢弃,右边补0。
右移运算分为两种:

  1. 逻辑移位 左边用0填充,右边丢弃
  2. 算术移位 左边用原该值的符号位填充,右边丢弃

代码演示

#include <stdio.h>

int main()
{
    
    
	printf("%d\n", 5 >> 1);
	printf("%d\n", 5 << 1);
	return 0;
}

代码运行结果:
在这里插入图片描述
对于移位运算符,不要移动负数位,这个是标准未定义的。

位操作符

& 按位与
| 按位或
^ 按位异或

位操作符操作的也是二进制位。
&操作符,两个数二进制位对应的都是1才是1,只要有0就是0。
| 操作符,两个数二进制位对应的都是0才是0,只要有1就是1。
^操作符,两个数二进制位相同为0,相异为1。
代码演示:

#include <stdio.h>

int main()
{
    
    
	printf("%d\n", 1 & 2);
	printf("%d\n", 1 | 2);
	printf("%d\n", 1 ^ 2);
	printf("%d\n", 1 ^ 2 ^ 1);
	printf("%d\n", 1 ^ 1 ^ 2);

	return 0;
}

运行结果
在这里插入图片描述
从运行结果我们也可以看出,^操作符满足交换律。

赋值操作符(=)

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

复合赋值操作符

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

这些运算符都可以写成复合的效果。
例如a+=b就等价于a=a+b。

单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

– 前置、后置–
++ 前置、后置++*
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

sizeof(数组名)计算的是整个数组所占空间的大小
这里重点讲一下前置++和后置++,–跟它同理。
前置++,变量先加1在使用。
后置++,先使用变量的值,在加1。
解引用操作符可以拿到指针指向的那个内容。

关系操作符

>
>=
<
<=
!= 用于测试“不相等”

== 用于测试“相等

这些关系运算符比较简单,没什么可讲的。

逻辑操作符

&& 逻辑与
|| 逻辑或

&&两边都为真才为真,否则为假,如果左边为假,右边就不进行运算了。
|| 两边都为假才为假,都则为真,如果左边为真,右边就不进行运算了。

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,会从左向右依次计算,最后一个表达式的值为最终表达式的值。
代码演示

#include <stdio.h>

int main()
{
    
    
	int num = 0;
	num = (3 + 2, 2 + 4, 5 + 5);
	printf("%d\n", num);
	return 0;
}

运行结果
在这里插入图片描述

条件操作符

exp1 ? exp2 : exp3

这个操作符,如果exp1为真,就运算exp2为最终结果,否则exp3为最终结果。
比如我们求两个数最大值:

max = (a > b ? a : b);

下标引用,函数调用和结构成员

1.[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问一个结构的成员
. 结构体.成员名。
-> 结构体指针->成员名。

今天的分享就到这里结束了,感谢大家的关注和支持。

猜你喜欢

转载自blog.csdn.net/bushibrnxiaohaij/article/details/131471216