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语言程序的重要基础之一。

相关推荐
以后不吃煲仔饭2 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师3 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者7 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟8 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟26 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光30 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用31 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
爱摸鱼的孔乙己1 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法
ExiFengs1 小时前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring