C语言4 运算符

目录

[1. 算术运算符](#1. 算术运算符)

[2. 关系运算符](#2. 关系运算符)

[3. 逻辑运算符](#3. 逻辑运算符)

[4. 位运算符](#4. 位运算符)

[5. 赋值运算符](#5. 赋值运算符)

[6. 自增和自减运算符](#6. 自增和自减运算符)

[7. 条件运算符(三元运算符)](#7. 条件运算符(三元运算符))

[8. 逗号运算符](#8. 逗号运算符)

[9. sizeof 运算符](#9. sizeof 运算符)

[10. 取地址和解引用运算符](#10. 取地址和解引用运算符)

11.运算符的优先级


1. 算术运算符

`+` (加法):将两个数相加。

`-` (减法):将第一个数减去第二个数。

`*` (乘法):将两个数相乘。

`/` (除法):将第一个数除以第二个数,注意在整型除法中结果也是整型(小数部分被舍弃)。

`%` (取模):返回两个数相除的余数,只能用于整数。

示例

复制代码
int a = 10, b = 3;
int sum = a + b;      // sum = 13
int difference = a - b; // difference = 7
int product = a * b;    // product = 30
int quotient = a / b;   // quotient = 3
int remainder = a % b;  // remainder = 1

2. 关系运算符

`==` (等于):比较两个值是否相等。

`!=` (不等于):比较两个值是否不相等。

`>` (大于):检查第一个值是否大于第二个值。

`<` (小于):检查第一个值是否小于第二个值。

`>=` (大于等于):检查第一个值是否大于或等于第二个值。

`<=` (小于等于):检查第一个值是否小于或等于第二个值。

示例

复制代码
int a = 10, b = 20;
int result;

result = (a == b);    // result = 0 (false)
result = (a != b);    // result = 1 (true)
result = (a > b);     // result = 0 (false)
result = (a < b);     // result = 1 (true)
result = (a >= b);    // result = 0 (false)
result = (a <= b);    // result = 1 (true)

3. 逻辑运算符

`&&` (逻辑与):如果两个操作数都为真,则条件为真。

`||` (逻辑或):如果两个操作数有一个为真,则条件为真。

`!` (逻辑非):反转操作数的逻辑状态。

示例

复制代码
int a = 1, b = 0;
int result;

result = (a && b);    // result = 0 (false)
result = (a || b);    // result = 1 (true)
result = !a;          // result = 0 (false)

4. 位运算符

`&` (按位与):对两个数的每一位执行与操作。

`|` (按位或):对两个数的每一位执行或操作。

`^` (按位异或):对两个数的每一位执行异或操作。

`~` (按位取反):对数的每一位执行取反操作。

`<<` (左移):将一个数的所有位向左移动指定的位数。

`>>` (右移):将一个数的所有位向右移动指定的位数。

示例

复制代码
int a = 5, b = 3;
int result;

result = a & b;   // result = 1 (0101 & 0011 = 0001)
result = a | b;   // result = 7 (0101 | 0011 = 0111)
result = a ^ b;   // result = 6 (0101 ^ 0011 = 0110)
result = ~a;      // result = -6 (~00000101 = 11111010)
result = a << 1;  // result = 10 (0101 << 1 = 1010)
result = a >> 1;  // result = 2 (0101 >> 1 = 0010)

5. 赋值运算符

`=` (赋值):将右边的值赋给左边的变量。

`+=` (加且赋值):将右边的值与左边的变量相加并赋值给左边的变量。

`-=` (减且赋值):将右边的值与左边的变量相减并赋值给左边的变量。

`*=` (乘且赋值):将右边的值与左边的变量相乘并赋值给左边的变量。

`/=` (除且赋值):将右边的值与左边的变量相除并赋值给左边的变量。

`%=` (取模且赋值):将右边的值与左边的变量取模并赋值给左边的变量。

示例

复制代码
int a = 10;
a += 5;  // a = 15
a -= 3;  // a = 12
a *= 2;  // a = 24
a /= 4;  // a = 6
a %= 4;  // a = 2

6. 自增和自减运算符

`++` (自增):将操作数的值增加1。例如 `a++` 或 `++a`。

`--` (自减):将操作数的值减少1。例如 `a--` 或 `--a`。

示例

复制代码
int a = 5;
a++;  // a 现在是 6
++a;  // a 现在是 7
a--;  // a 现在是 6
--a;  // a 现在是 5

7. 条件运算符(三元运算符)

`?:` (条件运算符):根据条件表达式的真假值来选择执行两个表达式之一。

示例

复制代码
int a = 10, b = 20;
int result;

result = (a > b) ? a : b;  // result = 20

8. 逗号运算符

`,` (逗号运算符):按顺序执行一系列操作,并返回最后一个操作的值。

示例

复制代码
int a = 1, b = 2, c;
c = (a += 1, b += 2, a + b);  // c = 6 (a=2, b=4)

9. sizeof 运算符

`sizeof`:返回变量或数据类型的大小(以字节为单位)。

示例

复制代码
int a = 10;
printf("Size of a: %lu\n", sizeof(a));       // 输出变量 a 的大小
printf("Size of int: %lu\n", sizeof(int));   // 输出数据类型 int 的大小

10. 取地址和解引用运算符

`&` (取地址):返回变量的地址。

`*` (解引用):访问指针所指向的地址的值。

示例

复制代码
int a = 10;
int *p;
p = &a;     // p 现在是变量 a 的地址
int b = *p; // b 现在是变量 a 的值,即 10

11.运算符的优先级

在C语言中,运算符的优先级决定了表达式中各个运算符操作的顺序。下面是常见运算符按优先级从高到低排列的列表:

  1. 逗号运算符

  2. 赋值运算符 (`=`, `+=`, `-=` 等)

  3. 条件运算符 (`?:`)

  4. 逻辑或运算符 (`||`)

  5. 逻辑与运算符 (`&&`)

  6. 按位或运算符 (`|`)

  7. 按位异或运算符 (`^`)

  8. 按位与运算符 (`&`)

  9. 相等性和关系运算符 (`==`, `!=`, `<`, `>`, `<=`, `>=`)

  10. 移位运算符 (`<<`, `>>`)

  11. 加法和减法运算符 (`+`, `-`)

  12. 乘法、除法和取模运算符 (`*`, `/`, `%`)

  13. 一元运算符 (如 `++`, `--`, `!`, `~`, `+`, `-`)

  14. 解引用和取地址运算符 (`*`, `&`)

  15. sizeof运算符

优先级较高的运算符会先于优先级较低的运算符进行计算。在表达式中,可以使用圆括号 `()` 来改变运算符的计算顺序,圆括号中的表达式会先于外部的运算符进行计算。

例如,考虑以下表达式:

复制代码
int a = 10, b = 5, c = 3;
int result = a + b * c;

根据运算符的优先级,乘法运算符 `*` 比加法运算符 `+` 的优先级高,因此先计算乘法,然后再进行加法运算。如果想先计算加法,可以使用圆括号来改变优先级:

复制代码
int result = (a + b) * c;

这样就会先计算加法,然后再乘以 `c`。理解和正确利用运算符的优先级是编写正确和高效C语言程序的重要基础之一。

相关推荐
景天科技苑9 分钟前
【Rust泛型】Rust泛型使用详解与应用场景
开发语言·后端·rust·泛型·rust泛型
Swift社区9 分钟前
Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值
开发语言·ios·swift
JANYI201814 分钟前
C语言易混淆知识点详解
java·c语言·算法
愚润求学16 分钟前
【Linux】简单设计libc库
linux·运维·开发语言·c++·笔记
桃子酱紫君20 分钟前
华为配置篇-RSTP/MSTP实验
开发语言·华为·php
刚入坑的新人编程21 分钟前
C++STL——map和set的使用
开发语言·c++
葵花日记29 分钟前
数据结构——二叉树
c语言·数据结构
kyy_studydiary41 分钟前
集合-进阶
java·开发语言
Bl_a_ck1 小时前
--openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式
开发语言·前端·web安全·网络安全·前端框架·ssl
越城1 小时前
数据结构中的栈与队列:原理、实现与应用
c语言·数据结构·算法