C 语言编程 — 运算符
目录
文章目录
- 目录
- 前文列表
- 运算符
- 算数运算符
- 自增、自减运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 逗号运算符
- sizeof 运算符
- 杂项运算符
- 运算符的优先级
前文列表
《程序编译流程与 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 语言编程 — 运算符相关推荐
- Go 语言编程 — 运算符
目录 文章目录 目录 运算符 赋值运算符 算术运算符 逻辑运算符 关系运算符 位运算符 指针运算符.取值运算符和取址运算符 运算符优先级 ... 语法糖 运算符 Golang 内置的运算符包括: 赋值 ...
- C 语言编程 — 高级数据类型 — void 类型
目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...
- C 语言编程 — 高级数据类型 — 字符串
目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...
- C 语言编程 — 指令行参数
目录 文章目录 目录 前文列表 命令行参数 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> < ...
- C 语言编程 — 编程实践
目录 文章目录 目录 前文列表 程序示例 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> < ...
- C 语言编程 — 编程规范
目录 文章目录 目录 前文列表 排版 注释 头文件 函数 标识符命名与定义 变量 宏.常量 代码逻辑 内存操作 日志打印 质量保证 单元测试 断言 安全性 可移植性 参考文档 前文列表 <程序编 ...
- C 语言编程 — GDB 调试工具
目录 文章目录 目录 前文列表 代码调试 GDB 启动 GDB 交互命令 运行程序 暂停程序 设置断点 设置观察点 设置捕捉点 打印信息 查询运行信息 分割窗口 前文列表 <程序编译流程与 GC ...
- C 语言编程 — 堆栈与内存管理
目录 文章目录 目录 前文列表 栈(Stack)和堆(Heap) 栈 堆 内存管理 动态分配内存 重新调整内存的大小和释放内存 malloc 函数详解 memset 初始化内存数据 前文列表 < ...
- C 语言编程 — 输入/输出与文件操作
目录 文章目录 目录 前文列表 输入/输出 scanf() 和 printf() getchar() 和 putchar() 文件操作 打开文件 关闭文件 写入文件 读取文件 二进制 I/O 函数 前 ...
最新文章
- gets scanf以及缓冲区域的问题
- jvm性能调优实战 -60 线上系统的JVM参数优化、GC问题定位排查、OOM分析解决
- 去贵阳参观大数据到哪参观_您必须参观的四个世界
- jQuery 1.9.1中live()变更
- 使用Azure云原生构建博客是怎样一种体验?(上篇)
- 莫烦python博客_《莫烦Python》笔记 -- numpy部分
- orm和mysql_orm与mysql
- Camera 初始化(Open)二(HAL3中Open过程)
- 2019年12月7日pmp考试成都在哪考
- reviewboard mysql_【ReviewBoard】安装与配置
- 微型计算机的微处理器芯片集成了,微型计算机的微处理器芯片上集成了什么东西...
- vue引入阿里巴巴矢量图库图标
- 读取yaml文件出现UnicodeDeco: ‘gbk‘ codec can‘t decode byte 0xaf in position 68: illegal multibyte sequen报错
- 单片机闪灯c语言,PIC单片机入门之闪灯程序
- cf - 1457C - Bouncing Ball - ( dp )
- pip设置默认为清华镜像
- 利用arcgis进行excel数据的空间相关性分析
- JavaWeb将操作成功的消息返回给前端
- GAME(A)性能测试过程模型
- linux版_百度输入法Linux版发布 | 欧侃在线“统一源”提供直接安装
热门文章
- Xamarin Anroid开发教程之Anroid开发工具及应用介绍
- mysql8.0.12插件_mysql 8.0.12 安装使用教程
- ifconfig 安装_第一章Linux服务器环境搭建之JDK安装
- easypoi导出word表格_java如何导出word和wps文档
- php 怎么防注入,php 防止注入的几种办法
- 解决电脑重启后 ubuntu 不能联网
- Nature子刊:用机器学习揭露人类基因调控背后的“语法”
- 陈国良、孙永强教授获中国计算机学会「终身成就奖」,为国内并行算法和编译技术先驱...
- 波士顿动力机器狗半夜遛弯儿惊呆路人,还配合拍照,网友:想到了《黑镜》...
- 百度Q2日进2.9个亿,新基建推动Apollo上位!李彦宏开招管培生:亲自选亲自带...