C语言的运算符你了解吗

目录前言一、算数运算符(数学运算)+ -* / %二、逻辑运算符(判断真假)|| &&> >= < <=!? :三元运算符三、位运算符(重点)<<左移>>右移& | ^ ~与 或 异或 取反四、赋值运算符五、内存访问符号()限制符/函数访问符[]内存访问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位,数据=数据2m左移n位,m=m2ⁿ

>>右移

运算场景:右移1位,数据=数据/2m右移n位,m=m/2ⁿ

注意:signed和unsigned的右移动是不同的signed修饰的变量的右移做while条件且变量为负数时,while会进入死循环(因为最高位=1,是符号位,永远无法右移为0)

& | ^ ~与 或 异或 取反

&与bit中任意一位与0相&,该位都为0场景:

屏蔽清零器a=a | (~(0x1<<n))

int a=0x1234;//屏蔽低8位a=a& 0xff00;
int a=0x1234;//清零器,清除bit第五位的高电平,转为低电平,其他位不变a=a & (~(0x1<<5));

|或bit中任意一位与1相|,该位都为1场景:

保留/设置:设置高电平的方法,如设置指定位为高电平,其他位不变a=a | (0x1<<n)

int a=3;//使用左移可以更方便快速的让第五位bit处于高电平,而且不影响其他位(嵌入式中bit最右边通常读作第0位)a= a| (0x1<<5)

^异或相同为0,不同为11.通常用于数据加密算法,AES SHA1等2.数据交换(排序中的一种方法)

a=a^b;

b=a^b;a=a^b;

~取反按位取反

四、赋值运算符

= += -= &= …赋值运算实际上是组合运算的缩写,非原子性操作,volatile内存可见特性会失效(实际上执行了两步,只靠volatile无法解决)

五、内存访问符号

()限制符/函数访问符

1.限制符

(a+b)*c

1.函数访问符

void fun();

[]内存访问ID符

内存访问ID符(C语言中并不局限于数组的访问,通过指针可以访问整个内存空间)

a[0]a[1]

{}函数体限制符

函数体限制符

->地址访问符

.变量访问符

&取址符

&a;

*取值符

*a;

总结

本章主要为C语言运算符的使用

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!

人总是珍惜未得到的,而遗忘了所拥有的

C语言的运算符你了解吗

相关文章:

你感兴趣的文章:

标签云: