C语言运算符详解

这篇博客详细介绍了C语言中的各种运算符,包括算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符以及sizeof运算符。通过实例解析了每种运算符的功能、用法和注意事项,特别是自增、自减、位操作和条件运算符的特殊性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,引入表达式的概念:由操作数运算符组合成的式子
分为左值右值
(1)左值:就是可以的内存块,也就是变量
(2)右值:可以的内存块,也就是变量,常量,字面值

一.算术运算符

(1)+
(2)-
(3)*
(4)/
如:10/3=3
5.0/2=2.5
说明:
如果两个操作数都为整数,执行整数除法(舍弃小数部分)只要有浮点数,就执行浮点数除法,而且会向下取整(也就是小数点之后的舍弃
注意:/的右操作数不能为0

例:

int a=1;
int b=0;
printf("%d\n",a/b);

结果会报错:

Exception in thread "main" java.lang.ArithmeticException: / by zero
//算术异常

(5)%–>取余
如:10%3=1
注意:%要求两个操作数都为整数,并且右操作数不能为0,并且运算结果的符号左操作数决定
例:

printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1
printf("%d\n",-10%-3);//1
printf("%d\n",-10%-3);//-1

(6)++ -->自增运算符
(7)-- -->自减运算符
注意:自增和自减运算符只能用于变量,不可以用于常量或表达式

分为前置和后置:
(1)前置:先++或–,再使用
(2)后置:先使用,再++或–
例:

int i=0;
printf("%d\n",++i);//1
printf("%d\n",i);//1
i=0;
printf("%d\n",i++);//0
printf("%d\n",i);//1

二.赋值运算符

=:结合性从右到左
例:

int a,b;
a=b=10;
printf("%d\n",a);//10
printf("%d\n",b);//10

复合赋值运算符
+=
-=
*=
/=
%=
<<=
>>=
&=
/=
^=
例:

a+=3;//相当于a=a+3;

三.关系运算符

>

>=

<

<=

!=   用于测试“不相等”

==   用于测试“相等”

=        用于赋值

注意:要注意   == 和   =   的区别

四.逻辑运算符

&&(逻辑与,二元运算符)

真 && 真 -> 真 真 && 假 -> 假
假 && 真 -> 假 假 && 假 -> 假

||(逻辑或,二元运算符)

真 || 真 -> 真 真 || 假 -> 真
假 || 真 -> 真 假 || 假 -> 假

!(逻辑非,一元运算符)

注意:

逻辑与的短路问题:当左操作数为假时,即可判断表达式结果为假,右操作数不执行。

逻辑或的短路问题:当左操作数为真时,即可判断表达式结果为真,右操作数不执行。

例:

int a = 1, b = 1;
printf("%d\n", ++a || ++b);
printf(“a=%d b=%d\n”, a, b); // a=2 b=1
int a = -1, b = -1;
printf("%d\n", ++a && ++b);
printf(“a=%d b=%d\n”, a, b); // a=0 b=-1

例:

x=y=1;
t=++x||++y;
//结果是t=1,x=2,y=1

五.位运算符(均在二进制位上操作)

首先,我们要知道,数据存储的最小的单位是字节,而对数据进行操作的最小的单位是比特,每个字节由8个比特位构成。
我们自己设定:A= 00000101,B= 00001011
&(按位与):同1为1,其它为0
则A&B=00000001

例:在这里插入图片描述

|(按位或):有1即为1
则A|B=00001111

例:
在这里插入图片描述

~(按位取反):0变1,1变0
则~A=11111010

^(按位异或):相同为0,不同为1
则A^B=00001110
例:

0^0=0;
1^0=1;
1^1=0;

注意:一个数a位异或另外一个数b两次,结果还是这个数a本身。(也就是说如果两个数相同,异或的结果是0)这个特点可以用来交换两个元素的值

<<(按位左移):左操作数向左移动右操作数指定的位数,低位补0(也就是最左侧不要了,右侧补0)
则A<<2=00010100

注意:左移运算符左移一位相当于乘以2,而且左移丢弃的是符号位,所以正数左移可能会变为负数

 >>(按位右移):左操作数向右移动右操作数指定的位数,高位补符号位(正数补0,负数补1)
 >则A>>2=00000001
注意:右移运算符右移一位相当于除以2

 >>>:无符号右移:最右侧不要了,最左侧补0

六.条件运算符

语法是 :exp1?exp2:exp3;

这个表达式的意思是如果exp1为真整个表达式的结果就是exp2,如果exp1为假整个表达式的结果就是exp3

例:

//求较大值
int a=10;
int b=20;
printf("%d\n",(a>b?a:b));

注意:表达式2和表达式3的结果必须是同类型的,除非可以发生隐式类型转换

例:

int a=10;
int b=20;
int c=a>b?1:2.0;

表达式不能单独存在结果必须要被使用

例:

int a = 10;
int b = 20;
a > b? a : b;     // 会报错: 不是语句

七.逗号运算符

exp1,exp2,exp3,…expN;

逗号表达式会从左到右依次执行整个表达式的结果最后一个表达式的结果

八.sizeof

注意:sizeof是一个运算符,而不是函数

九.运算符的优先级

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:同一级的运算符,优先次序由结合方向决定,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值