Linux C语言:运算符(上)

**一、**最基本的操作就是进行各种运算

(一)、运算符

1、算术运算符:+、-、*、/、%、++、--

2、关系运算符:>、<、>=、<=、==、!=

3、逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)

3、赋值运算符:

(1) 赋值:=

(2) 算术复合赋值运算符:+=、-=、*=、/=、%=

(3)位运算复合赋值运算符:<<=、>>=、&=、|=、^=

4、位运算符:&、|、^、~、<<、>>

(1)三目运算符:? :

(2)逗号运算符:,

(3)大小运算符:sizeof

(4)其它运算符:

\] (下标引用操作符)、( ) (函数调用操作符)、(类型)(强制类型转换)\&(取地址操作 符)、-\>(结构成员操作符) #### (二)、运算符相关术语 1、表达式:由一个或多个操作数及运算符组成的式子 a = b + 10 \* c; 2、优先级:运算符执行的优先级,优先级高的先执行 a = b + 10 \* c; //先执行 10 \* c,再执行b+,最后执行= 3、结合性:当优先级相同时,可以通过结合性确定表达式如何结合来确定执行顺序 a = b \* c / 10; //综合性从左到右 4、类别:参与当前运算符运算的操作数个数,一元(单目)、二元(双目)、三元(三目) a = b + 10 \* c;// + \* 二元运算符 a++; //++ 一元运算符 ![](https://img-blog.csdnimg.cn/direct/e50eea3824514e40a3eaad8acdd04a15.png) ![](https://img-blog.csdnimg.cn/direct/79cf01b1dfb84ae790ff6eec2ceaaa5d.png) ## 二、 算数运算符 C提供的算术运算符:+,-,\*,/(除),%(取余),++(自增),--(自减) #### 1、算术运算符 /(除) (1)除号的两端都是整数的时候,执行的是整数除法; int a = 7 / 2; //商3余1 (2)除号两端只要有一个浮点数,就执行浮点数的除法; float b = 7 / 2.0; //结果3.5 #### 2、算术运算符 %(取余、取模) 取余运算符参与运算的两个操作数只能是整数 int a = 17 % 5; //取余 结果是通过如下数学运算得到的: 先求商:17 / 5 = 3 再求余:17 - 3 \* 5 = 2 所以,int a = 17 % 5 //结果是2; #### 3、举个例子 (1)能被4整除且不能被100整除的年份,是闰年 (year % 4 == 0) \&\& (year % 100 != 0) (2)能被400整除的年份,是闰年 year % 400 == 0 (3)开发板获取的温度值/时间值,显示到数码管上,做数字拆解?43如何获取个位和十位数呢? 分离十位:43 / 10 = 4 分离个位:43 % 10 = 3 ## 三、赋值运算符 #### 1、赋值运算符为"=",作用是将一个值赋给另一个变量。 #### 2、常见形式有以下 3 种。 ① 变量 = 表达式 a = 10 +2 \* 3; ② 变量 = 常量 a = 10; ③ 变量 = 变量 a = b; #### 3、将一个数据赋给一个变量,和数学中的等号含义不同; x + 1 = 2 数学:x + 1 = 2 合法,表示x + 1的值与2相等 C语言:x + 1 = 2,非法 =左侧不允许是表达式,只能是一个变量名; x = x + 1 数学:x = x + 1,不成立 C语言:x = x + 1,成立,取出x的值后加1,再存入x中 #### 4、赋值混合运算符 ![](https://img-blog.csdnimg.cn/direct/6f3ac54bc3dc4440acff7c5d28db01b6.png) ![](https://img-blog.csdnimg.cn/direct/7cb665624ada49818ac8d0f2a3bcde78.png) ![](https://img-blog.csdnimg.cn/direct/3a3c3d0b17ba406eab1a8cbdc27e2022.png) #### 5、应用 下面表达式的值是多少: int a = 10, b = 5; a \*= b + 6; // ?? 优先级: +的优先级大于\*=,所以先计算b+6为11,再计算10 \* 11 建议:当不确定优先级时,使用()来显示的进行明确 a = (b + c) \* 10;//()的优先级是最高的 ## 四、自增和自减运算符 ++ -- #### 1、简介 将变量的值进行加1和减1的操作; 自增和自减运算符都是一元运算符,只需要一个操作数; l可以作为前置运算符,也可以作为后置运算符 前置: 运算符位于变量之前 ++i --i 后置:运算符位于变量之后 i++ i-- 如果前置或后置作为一个单独的语句出现,并没有什么区别 #### 2、应用于表达中 如果前置或后置作为一个单独的语句出现,并没有什么区别 (1)后置运算符会先让变量参与别的运算,最后才自增或自减 int a = 20, b; b = a++;![](https://img-blog.csdnimg.cn/direct/11ca6bbc92e849f2b372b0242b48283b.png) (2)前置运算符会变量先自增(减),然后参与别的运算 int a = 20, b; b = ++a; ![](https://img-blog.csdnimg.cn/direct/24df392f73374d98b0d89bc606924669.png) ## 五、位运算符 C语言可以直接对二进制位进行操作: ![](https://img-blog.csdnimg.cn/direct/9a57bcd54d2a4a80b6610d5453981590.png) #### 1、单目运算符 \~ • 用于改变二进制每一位的值,使0变成1, 1变成0. 例如: ```cs unsigned char x=0x17, y; y = ~x; ``` ![](https://img-blog.csdnimg.cn/direct/fad6302634534ef2b251c0a2ac367985.png) #### 2、数据类型限制,按位取反只能作用于整型数据。 float a = 10.0; float b = \~a; //错误,浮点型数据无法使用按位取反操作 ![](https://img-blog.csdnimg.cn/direct/8c5a9d15873e4c208b9b616122022b53.png) ![](https://img-blog.csdnimg.cn/direct/d0ac1a814a064895819fc2091c52c764.png) #### 3、在按位取反一般情况下,会将数据的符号改变。 (1)对于正数来说,取反后最高位的值为1(负数的符号位); (2)对于负数来说,取反后最高位的值变为0(正数的符号位)。 int a = 10; //a的二进制表示为 0000 1010 int b = \~a; //按位取反后,b的二进制表示为 1111 0101,即-11 int c = \~b; //再次取反后,c的二进制表示为 0000 1010,即10 #### 4、按位异或 \^ (1)按位异或,相异为真,相同为假 逐个比较两个位,如果相应的位只有1个为1,那么结果为1。(只要记住它是无进位相加即可) ![](https://img-blog.csdnimg.cn/direct/2297a565006e44e995de31eb3dcfa8bd.png) 例如: ```cs unsigned char x=75, y=0173, z; z = x ^ y ; ``` ![](https://img-blog.csdnimg.cn/direct/b8e8c43c11034ac98627a51c41411313.png) #### 5、按位异或 \^-性质 (1)0 \^ n = n //任何数和0异或结果都是它自己。异或是无进位相加,每个位都和0加了,其实也就是0被覆盖了。 (2)a \^ b = b \^ a //交换律 (3)a \^ b \^ c = a \^ ( b \^ c )//先异或谁都行,无论怎样改变异或顺序,结果都不发生改变 #### 6、位运算符\^-应用 **原地交换两个数的值:** int a = 10; //a的二进制表示为 0000 1010 int b = 20; //b的二进制表示为 0001 0100 a = a \^ b; //a的二进制表示为 0001 1110 b = a \^ b; //b的二进制表示为 0000 1010,即10 此时b的值为a\^b\^b a = a \^ b; //a的二进制表示为 0001 0100,即20 此时a的值为a\^b\^a

相关推荐
愚润求学14 分钟前
【Linux】动静态库链接原理
linux·运维·服务器·开发语言·笔记
呦呦彬22 分钟前
【问题排查】easyexcel日志打印Empty row!
java·开发语言·log4j
Tummer836332 分钟前
C#+WPF+prism+materialdesign创建工具主界面框架
开发语言·c#·wpf
九章云极AladdinEdu39 分钟前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
好吃的肘子1 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
ghost1431 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
小白学大数据1 小时前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
立秋67891 小时前
用Python绘制梦幻星空
开发语言·python·pygame
wingaso1 小时前
[经验总结]删除gitlab仓库分支报错:错误:无法推送一些引用到“http:”
linux·数据仓库·git
独行soc1 小时前
2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
linux·经验分享·安全·阿里云·面试·职场和发展·云计算