目录
- 前言
-
一、算数运算符(数学运算)
- + -
- * / %
-
二、逻辑运算符(判断真假)
- || &&
- > >= < <=
- !
- ? :三元运算符
-
三、位运算符(重点)
- <<左移
- >>右移
- & | ^ ~与 或 异或 取反
-
四、赋值运算符
-
五、内存访问符号
- ()限制符/函数访问符
- []内存访问ID符
- {}函数体限制符
- ->地址访问符
- &取址符
- *取值符
-
总结
前言
自学笔记,没有历史知识铺垫(省略百度部分)C语言运算符的使用
一、算数运算符(数学运算)
+ -
左右数据同一数据类型
* / %
注意
乘/除法在很多CPU中无法实现,或者需要多个CPU周期去实现嵌入式开发中,乘/除法可能需要第三方乘法库才能实现乘/除法可能导致程序的移植性变差%取模 场景:
获取范围数值时,如:int result=(x%100)+1; 则result值的范围为[1.100]得到m进制的个位数,如8进制个位数: int a=x%8;介于取模的特性,可以用在循环数组结构中获取下标,0,1,2,3,0,1,2,3,0,1,2…
二、逻辑运算符(判断真假)
|| &&
逻辑或 逻辑与
> >= < <=
大于 大于等于 小于 小于等于
!
非
? :三元运算符
三元运算符
三、位运算符(重点)
<<左移
运算场景:
左移1位,数据=数据2
m左移n位,m=m2ⁿ
>>右移
运算场景:
右移1位,数据=数据/2
m右移n位,m=m/2ⁿ
注意:
signed和unsigned的右移动是不同的
signed修饰的变量的右移做while条件且变量为负数时,while会进入死循环(因为最高位=1,是符号位,永远无法右移为0)
& | ^ ~与 或 异或 取反
&与
bit中任意一位与0相&,该位都为0
场景:
| 1 2 3 |
int a=0x1234;
//屏蔽低8位
a=a& 0xff00;
|
| 1 2 3 |
int a=0x1234;
//清零器,清除bit第五位的高电平,转为低电平,其他位不变
a=a & (~(0x1<<5));
|
|或
bit中任意一位与1相|,该位都为1
场景:
| 1 2 3 |
int a=3;
//使用左移可以更方便快速的让第五位bit处于高电平,而且不影响其他位(嵌入式中bit最右边通常读作第0位)
a= a| (0x1<<5)
|
^异或
相同为0,不同为1
1.通常用于数据加密算法,AES SHA1等
2.数据交换(排序中的一种方法)
a=a^b;
b=a^b;
a=a^b;
~取反
按位取反
四、赋值运算符
= += -= &= ...
赋值运算实际上是组合运算的缩写,非原子性操作,volatile内存可见特性会失效(实际上执行了两步,只靠volatile无法解决)
五、内存访问符号
()限制符/函数访问符
1.限制符
?| 1 |
(a+b)*c
|
1.函数访问符
?| 1 |
void fun();
|
[]内存访问ID符
内存访问ID符(C语言中并不局限于数组的访问,通过指针可以访问整个内存空间)
?| 1 2 |
a[0]
a[1]
|
{}函数体限制符
函数体限制符
->地址访问符
.变量访问符
&取址符
?| 1 |
&a;
|
*取值符
?| 1 |
*a;
|
总结
本章主要为C语言运算符的使用
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/weixin_41832302/article/details/119877412








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。