C 语言编程 — 运算符
目录
前文列表
《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
运算符
运算符是一种告诉编译器执行特定的算数或逻辑操作的符号。
- 操作对象:又称操作数,是参与计算求值的最小数据单元。操作数可以为常量、变量、函数等。
- 表达式:用运算符将操作对象连接起来可以构成表达式。表达式是用于计算的式子,是计算求值的基本单位。
- 优先级:高优先级的运算符先进行运算,低优先级的运算符后进行运算。
- 结合性:决定了运算符的运算方向。
- 左结合性:当运算符为从左到右进行运算,那么称这个运算符为左结合性运算符
- 右结合性:当运算符为从右到左进行运算,那么称这个运算符为右结合性运算符
NOTE:
- 当一个表达式中出现多个运算符时,需要考虑运算符的优先级和结合性是否影响表达式的求值顺序。
- 当两个运算符相同优先级时,由运算符的结合性来决定运算顺序。
- 在表达式中使用圆括号
()可以改变表达式的运算顺序。
算数运算符

NOTE:求余运算符的操作数只可以为整型。
自增、自减运算符
- i++ :先取值,后自加。使用 i 之后,
i=i+1 - ++i :先自加,后取值。
i=i+1后,再使用 i - i- - :先取值,后自减。使用 i 之后,
i=i-1 - -i :先自减,后取值。
i=i-1后, 再使用 i
- -i :先自减,后取值。
NOTE:自增运算符和自减运算符的操作数只可以为变量,不能为常量或表达式。
比较运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:

NOTE:比较表达式的运算结果值是 0(假)或 1(真)。C 语言没有 bool 类型,用整数值 0 来表示假,用非 0 值来表示真 。C++ 为提高程序的可读性引入了 bool 类型,bool 类型变量的值为 true 或 false。C++ 为了保持对 C 语言的兼容性,false 用 0 来表示,ture 用 1 来表示。
逻辑运算符
逻辑表达式:用逻辑运算符将操作对象连接起来的式子,称为逻辑表达式。
假设变量 A 的值为 1,变量 B 的值为 0,则:

NOTE:当逻辑表达式中同时出现多种运算符时,按下列顺序进行运算:算术运算→关系运算→逻辑运算。
位运算符
位运算符作用于位,并逐位执行操作。&(全一则一)、|(有一则一)、^(异或)、~(取反)的真值表如下所示:



假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
- A&B = 0000 1100
- A|B = 0011 1101
- A^B = 0011 0001
- ~A = 1100 0011
赋值运算符
赋值运算表达式:用赋值运算符将变量和表达式连接起来的式子,称为赋值运算表达式。
多重赋值: V1=V2=...=Vn= 表达式。执行时,从右到左把表达式的值按照 Vn、… 、V2、V1 的顺序依次赋给每个变量。
赋值运算符可分为:
- 基本赋值运算符: = 将一个数据赋给一个变量功能的运算符。
- 复合赋值运算符:基本赋值运算符与算术运算符、位运算符等组成复合赋值运算符。
NOTE:
- 赋值运算符的左侧必须为变量名,右侧必须为表达式。
- 赋值运算表达式的值为赋值运算符左侧变量的数据值。
- 赋值运算表达式的数据类型为左侧变量的数据类型。
- 当出现右侧表达式的数据类型与左侧变量的数据类型不一致时,则会先把右边表达式的值进行强制数据类型转换后,再进行赋值。

逗号运算符
逗号运算符:又称为顺序求值运算符,功能是将表达式连接起来,从左向右求解各个表达式,逗号运算的值为最后的表达式 n 的值。
NOTE:逗号运算符的优先级最低,引入逗号表达式的目的是为了简化程序书写。
// C/C++ 按顺序计算表达式 1,表达式 2, .....,表达式 n 的值
// 整个逗号表达式的值为表达式 n 的值
表达式1, 表达式2, 表达式3, ......, 表达式n
sizeof 运算符
sizeof 运算符:求某一数据类型或某一变量在内存空间中所占空间的字节数。
sizeof(变量名或数据类型)
e.g.
int main()
{
char stringA[] = "Hello World!\r\n";
printf(" sizeif( char ) = %d\r\n", sizeof(char));
printf(" sizeif( int ) = %d\r\n", sizeof(int));
printf(" sizeif( long int ) = %d\r\n", sizeof(long int));
printf(" sizeif( float ) = %d\r\n", sizeof(float));
printf(" sizeif( double ) = %d\r\n", sizeof(double));
// 注意 stringA 的末尾还存放着 '\0'
printf(" sizeif( stringA ) = %d\r\n", sizeof(stringA)/sizeof(char));
return 0;
}
杂项运算符
包括 &(地址运算符)、*(指针运算符)、?:(三元运算符)。

#include <stdio.h>
int main(){
int a = 4;
short b;
double c;
int * ptr;
printf("a: %lu\n", sizeof(a));
printf("b: %lu\n", sizeof(b));
printf("c: %lu\n", sizeof(c));
ptr = &a;
printf("*ptr: %d\n", *ptr);
return 0;
}
运行:
# ./main
a: 4
b: 2
c: 8
*ptr: 4
注意:局部变量 ptr 被定义为指针类型,所以 ptr 可以存储变量的 “指针”,即变量的值在内存中的入口地址。ptr = &a; 存储了局部变量 a 的地址,再通过指针运算符 * 将局部变量 a 的值取出来。
- 指针变量:存储的内存地址。
- 将变量/函数的内存地址赋值给指针变量。
- 通过指针运算符将指针变量储存的内存地址所指向的值取出来。
运算符的优先级
较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

C 语言编程 — 运算符的更多相关文章
- 个人c语言编程风格总结
总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- R语言编程艺术(4)R对数据、文件、字符串以及图形的处理
本文对应<R语言编程艺术> 第8章:数学运算与模拟: 第10章:输入与输出: 第11章:字符串操作: 第12章:绘图 =================================== ...
- R语言编程艺术(3)R语言编程基础
本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...
- R语言编程艺术(2)R中的数据结构
本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ======================================== ...
- C++语言编程规范
前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...
- c语言编程基础入门必备知识
数据类型 基本数据类型 类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单 ...
- C语言编程实现Linux命令——who
C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
前言 关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct ...
随机推荐
- 使用OHOS SDK构建libjpeg-turbo
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/libjpeg-turb ...
- Pandas统计计算
基本的统计方法 Method Description count Number of non-NA values describe Compute set of summary statistics ...
- 金融App面临安全风险?解锁HMS Core安全检测服务解决方案
数字经济时代,金融类App成为人们理财.购买证券股票以及办理各项银行业务的重要载体.科技驱动着金融行业的转型升级,但在创新发展的同时,金融App面临的安全风险类型与场景也在持续增加.如何更好地规避安全 ...
- IDEA快捷键快速补齐类和对象名
CTRL+ALT+V ----------快速补齐 类和对象名 如: new String("123") 光标放到最后 按下快捷键补齐为红色部分 String s = ne ...
- 【译】宣布在 Visual Studio 17.10 预览2中为 ARM64 架构提供 SSDT
我们很高兴地宣布在 ARM64 中为 Visual Studio 推出 SQL Server Data Tools(SSDT).这个增强是在令人兴奋的17.10预览版2中发布的.arm64 上 Vis ...
- 填报表中也可以添加 html 事件
在实际的项目开发中,填报表的应用十分广泛. 多数情况下,填报表会作为整个项目的一部分配合需求灵活使用,但有时也会受大项目环境的影响,产生一些特别的要求.比如,通常报表单元格的数据类型大多是文本,有时却 ...
- leetcode:94. 二叉树的中序遍历
94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? ...
- 使用ollama + AnythingLLM快速且简单的在本地部署llm3
使用ollama + AnythingLLM快速且简单的在本地部署llm3 不多说,直接开始 一.安装ollama ollama官网:https://ollama.com/ 下载地址:https:// ...
- PostgreSQL 14.4的安装以及使用以及一些安装的异常
PostgreSQL 14的安装以及使用 因为公司的一些要求,可能要换数据库,虽然之前装过,但是版本感觉还是新一点比较好,所以重新装一下 首先下载文件,直接去官网下载就行 https://www.en ...
- App隐私合规“免费”自动化检测
简介: App隐私合规检测提供了全面的隐私合规检测报告和专家建议,从确保形式合规(隐私政策文本合规性)及实质合规(代码层合规性)的一致性,从个人信息收集.权限使用场景.超范围采集.隐私政策.三方SDK ...