算术操作运算
- 数学加减乘除等
- * 乘法/指针定义,运算符要看场景
+ - 加减
A+B = C //尽量类型一致
* / 乘除
大多数处理器不支持,导致效率低,可移植性变差,少用
int a = b*10; //CPU可能多周期,甚至利用软件模拟实现乘法
int a = b+10; //CPU一个周期可以处理
% 求模 余数
0%3=0 1%3=1 2%3=2
- 得出的值位于两数之间
- a%b=c ==> c在(0-(b-1))之间
eg: 给定任意数,取一个范围的数 (m%100)+1 ==> res
得到M进制的一个个位数 如30的3进制个位数是 30%3=0
循环数据结构的下标
逻辑运算
真假 返回结果1/0 一般认为非0就是真
|| 与 && 或
A || B === B || A //不成立
//如A为假则 A||B 就为假,不必判断B的真假,其余同理
A && B
> >= < <=
没啥可讲的
! 取反
对比位运算取反操作
int a = 0x0;
!a if(!a){} //0 ==> 1
~a //内存空间全为1 0 ==>0x11111111
? :
位运算
« 左移 » 右移
嵌入式中应用最广泛 硬件最小处理单位-比特 软件无法直接定义比特,借助位运算操作
左移
当作乘法 二进制下的位移 M«1 ==> M *2 4: 00100 8: 01000 M « n ==> M*2*n
int a = b*32 ==> b<<5
注意符号问题,符号无关
-1 8bit表示 10000001 补码:符号位不变,其他位取反 11111110 内存中:补码加一 11111111
-2 10000010 补码 11111101 内存 11111110
左移右面默认补0
右移
符号变量有关 int a; a»n unsigned a; a»n 不一样
右移左面负数默认补1 正数默认补0
& | ^ 与或非
& 与 清零器 clear
A&0 =>0
屏蔽 取出
//屏蔽低八,取出高八
int a = 0x1234
a & 0xff00;
//清除第五位
a = a & 011111;
a = a & ~(0x1<<5);
| 或 设置器 set
A | 1 => 1 A | 0 => A
保留
设置为高电平
//设置一个资源bit5为高,其他不变
a = a | 0x100000
a = a | (0x1<<5)
^ ~
^ 异或
常用在算法里,加密解密,函数设计,而工程中用的少
//交换两个数,不引入第三个数
int a = 20;
int b = 30;
a = a^b;
b = a^b;
a = a^b;
~ 取反
32位情况下 ~0xf0 = 0xffff ff0f
区别于!,!结果只有1/0
赋值运算
=
前面所有符号不具有更新能力,不能赋值
+= -= &= …
a+=b;//等同下
a = a+b;
a = a & ~(0x1<<5);//同下
a&=~(0x1<<5);
内存访问符号
()
限制符
a = (a+b)*c
函数访问符号
int fun();
fun();//访问
[] 数组
内存访问 ID(标签)符号
a[1]
a[2]
函数体限制符
-> .
->
地址访问
.
变量访问
& *
&
取地址
&abc
位运算
&0x10
*
指针
*p
乘法
2*3