解码C语言运算符

算术运算符

运算符描述示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 22
%取模5 % 21
++自增a++a+1
--自减a--a-1

注意:

  • 整数除法会截断小数部分
  • 取模运算只能用于整数类型
C语言中前缀与后缀自增自减运算符的区别
前缀形式(先增减)
  • ++variable:先自增,后使用
  • --variable:先自减,后使用
后缀形式(后增减)
  • variable++:先使用,后自增
  • variable--:先使用,后自减
区别对比表
特性前缀形式 (++a, --a)后缀形式 (a++, a--)
执行顺序先增减,后使用先使用,后增减
返回值返回增减后的值返回增减前的值
性能通常更高效可能稍低(需要临时变量)
常见用途需要立即使用新值需要先使用原值
代码示例
#include <stdio.h>

int main() {
    int a = 5, b = 5;
    int x, y;

    // 前缀:先自增,后赋值
    x = ++a;
    printf("前缀: a = %d, x = %d\n", a, x); // a=6, x=6

    // 后缀:先赋值,后自增
    y = b++;
    printf("后缀: b = %d, y = %d\n", b, y); // b=6, y=5

    return 0;
}

关系运算符

运算符描述示例结果
==等于5 == 30
!=不等于5 != 31
>大于5 > 31
<小于5 < 30
>=大于等于5 >= 31
<=小于等于5 <= 30

逻辑运算符

运算符描述示例结果
&&逻辑与(全真为真,有假为假,若第一个为假则第二个不判断(短路)(5>3) && (2>1)1
||逻辑或(全假为假,有真为真,若第一个为真则第二个不判断(短路))(5>3) || (2<1)1
!逻辑非!(5>3)0

位运算符(以二进制形式进行位操作)

运算符描述示例结果
&按位与5 & 31
|按位或5 | 37
^按位异或5 ^ 36
~按位取反~5-6
<<左移(移出丢弃,空出补0)5 << 110
>>右移(移出丢弃,空出补符号位)5 >> 12

赋值运算符

运算符描述等价于
=简单赋值a = 5
+=加后赋值a += 5a = a + 5
-=减后赋值a -= 5a = a - 5
*=乘后赋值a *= 5a = a * 5
/=除后赋值a /= 5a = a / 5
%=取模后赋值a %= 5a = a % 5
&=按位与后赋值a &= 5a = a & 5
|=按位或后赋值a |= 5a = a | 5
^=按位异或后赋值a ^= 5a = a ^ 5
<<=左移后赋值a <<= 5a = a << 5
>>=右移后赋值a >>= 5a = a >> 5

其他运算符

运算符描述示例
sizeof()返回变量或类型的大小sizeof(int)
&取地址运算符&a
*指针运算符*ptr
?:条件运算符a > b ? a : b
,逗号运算符a = (b=3, b+2)a=5
[]下标运算符arr[5]
->结构体指针成员访问ptr->member
.结构体成员访问struct.member

运算符优先级

从高到低排列:

运算符结合性说明
() [] -> . ++ --左到右[1] 后缀操作
! ~ ++ -- + - (type) * & sizeof右到左[2] 一元操作
* / %左到右乘除运算
+ -左到右加减运算
<< >>左到右位移运算
< <= > >=左到右关系比较
== !=左到右相等比较
&左到右按位与
^左到右按位异或
|左到右按位或
&&左到右逻辑与
||左到右逻辑或
?:右到左条件运算符
= += -= *= /= %= <<= >>= &= ^= |=右到左赋值运算符
,左到右逗号运算符

代码示例

#include <stdio.h>

#include <stdio.h>

int main() {
    // 算术运算符
    int a = 10, b = 3;
    printf("算术运算:\n");
    printf("%d + %d = %d\n", a, b, a + b);  // 10 + 3 = 13
    printf("%d / %d = %d\n", a, b, a / b);  // 10 / 3 = 3(整数除法,小数部分被截断)

    // 关系运算符
    printf("\n关系运算:\n");
    printf("%d > %d = %d\n", a, b, a > b);  // 10 > 3 = 1(真)

    // 逻辑运算符
    printf("\n逻辑运算:\n");
    printf("(%d>%d) && (%d<%d) = %d\n", a, b, a, b, (a>b) && (a<b));  
    // (10>3) && (10<3) = 0(真 && 假 = 假)

    // 位运算
    printf("\n位运算:\n");
    printf("%d & %d = %d\n", a, b, a & b);  // 10 & 3 = 2
    // 10的二进制: 1010, 3的二进制: 0011
    // 按位与结果: 0010 = 2

    // 赋值运算
    int c = a;      // c = 10
    c += 5;         // c = 10 + 5 = 15
    printf("\n赋值运算: c = %d\n", c);  // 输出: c = 15

    // 条件运算符
    int max = (a > b) ? a : b;  // 10 > 3 为真,所以 max = a = 10
    printf("最大值: %d\n", max);  // 输出: 最大值: 10

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值