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++; //++ 一元运算符

二、 算数运算符

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、赋值混合运算符

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++;

(2)前置运算符会变量先自增(减),然后参与别的运算

int a = 20, b;

b = ++a;

五、位运算符

C语言可以直接对二进制位进行操作:

1、单目运算符 ~

• 用于改变二进制每一位的值,使0变成1, 1变成0.

例如:

cs 复制代码
unsigned char x=0x17, y;
        y = ~x;

2、数据类型限制,按位取反只能作用于整型数据。

float a = 10.0;

float b = ~a; //错误,浮点型数据无法使用按位取反操作

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。(只要记住它是无进位相加即可)

例如:

cs 复制代码
unsigned char x=75, y=0173, z;
z = x ^ y ;

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

相关推荐
m0_7482453424 分钟前
python——Django 框架
开发语言·python·django
曼巴UE529 分钟前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
熬夜苦读学习40 分钟前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这1 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
沐千熏1 小时前
Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)
linux·mysql·centos
阿巴~阿巴~1 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
黑牛先生2 小时前
【Linux】匿名管道
linux·运维·服务器
流星白龙2 小时前
【Linux】35.封装 UdpSocket(2)
linux·运维·windows
waicsdn_haha2 小时前
Visual Studio Code 2025 安装与高效配置教程
c语言·ide·windows·vscode·微软·编辑器·win7
奔跑吧邓邓子2 小时前
【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙
开发语言·爬虫·python·多进程