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

相关推荐
Re.不晚17 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会19 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香22 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??26 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
远望清一色42 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself1 小时前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家1 小时前
go语言中package详解
开发语言·golang·xcode