1.算数操作运算
+、-
CPU一个周期可以实现,A + B 尽量保持AB的类型一致
*、/
CPU可能需要多个周期完成,甚至要利用软件的模拟方法去实现乘除。
%
结果范围0~n-1(m%n)。
应用场景:取范围数时使用;得到n进制的一个个位数;循环数据结构的下标。
2.逻辑运算
返回结果就是1、0;
int a = 0;
if(a) //假
int a = -1;
if(a) //真
||、&&
A || B 与 B || A不等价
A && B 与 B && A不等价
首先会检查前面的是否成立,再判断是否检查后面的条件。
>、>=、<、<=
!
对比位运算中的取反。
int a = 0x0;
!a = 1;
~a = 0xff;
? :
3.位运算
<<、>>
左移:乘法*2 二进制下的位移
m << 1; m*2
m << n; m*(2^n)
4: 0 0 1 0 0
8: 0 1 0 0 0
int a = b * 32 ======> b << 5(编译器自动完成)
[数据、数字]
-1 * 2 = -2
8bit
源码:1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0
反码:1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
补码: 1 1 1 1 1 1 1 1(计算机存储的是补码)1 1 1 1 1 1 1 0 (左移低位补零)
右移:符号变量有关
有符号数左移时符号位不变。
&、|
& 、|
A & 0 =====> 0
&: 屏蔽
int a = 0x1234;
a & 0xff00;屏蔽低八位
A & 1 =====> 1
&: 取出
&:清零器
A | 0 ======>A
|:保留
A | 1 ======>1
|:设置高电平的方法
设置一个资源的bit5为高电平,其他位不变;
int a;
a = a | (0x1 << 5) ; =========> a = a | (0x1 << n) 第n位置1;
清除第5位
int a;
a = a & (~(0x1 << 5));========>a = a & (~(0x1 << n))第n位置清零;
^、~
^:逐位取反,相同为0,相异为1。
算法
-------------------------------
交换两个数
int a = 20;
int b = 30;
a = a ^ b;
b = a ^ b;
a = a ^ b;
~:逐位取反
4.赋值运算
=
+=、-=、&=...
5.内存访问符号
()
限制符,运算优先级限制。
函数访问。
[]
数组
内存访问的ID符号
{}
函数体的限制符号
->、.
->:地址
.:变量