运算符
1、算数操作运算符 +、-、*、/、%
加法:A+B, AB最好是同类型
乘除:乘法在很多CPU中并不支持,乘除法能不用就不用,可能会使执行变差
求模/求余数: n%m=res[0~(m-1)]
求模应用场景:
- 取一个范围的数:
- 给一个任意数,得到一个100以内的数
- 得到一个m进制的一个个位数
- 得到一个循环数据结构的下标
2、逻辑运算
返回结果:非0(真)或0(假)
1、||、&&
A||B /= B||A 原因(A若为真则不会执行B 预判断)
A&&B /= B&&A
2、>, >=, < ,<=
3、! 逻辑取反
对比位运算中取反操作 ~a
4、? : 问好冒号表达式
if else
3、位运算 **
1、移位 <<, >> 乘除法尽量用2^n
-
左移:乘法 相当于乘以2,二进制下的以为
- m<<n; m*2^n
- int a = b*32 ====> b<<5
- 数据和数字 都可以用左移做乘法,左移最右补0
- -1 : 10000001(第一位符号位)=>11111110(全部取反)=>11111111(要加1)
-
右移:除法 除以2
- 最左位和符号变量有关,正数0负数1
- while(a){ a>>!; } 如果a为负数那永远不可能为0
2、&,| 与,或
完成逐位取或屏蔽
-
与&:
-
屏蔽: A&0—>0 清零器 clr
-
int a =1234; a & 0xff000; //相当于屏蔽低8bit,取出高8bit
-
-
取出:A&1–>A
-
-
或|:
- 保留:A|0===A
- 设置为高电平/设置器 set:A|1===1
例:设置一个资源的bit5为高电平,其他位不变:(bit5为第六位)
int a;
a=a|100000;---->a|(0x1<<5);=====>a|(0x1<<n);: 对a的第n位设置为高电平
清除第五位: 要保证只有第五位为0其余都是0,不能用十进制与
a=a&(~(0x1<<n));
3、^异或、~取反
-
异或^: 相同为假,不同为真
-
应用:用在算法进行加密解密,工程上用的比较少;交换两个变量的值
-
a=a^b; b=a^b; a=a^b;
-
-
-
取反~:
- ~0xf0—>0x0f
思考:想把456bit设置为101?
4、赋值运算
前面所有的符号都不具备更新能力;在后面加上=就具备自更新
5、内存访问符号
- ():
- 限制符:最优先的加括号
- 函数访问符号 fun();
- []
- 内存访问的ID符号
- {}
- 函数体的限制符
- 结构体、共用体
- ->地址访问、. 变量访问 对于连续空间的访问方法
- &、*
- &后是数字是位运算,如果是变量名是取地址
- *p:指针;跟数字: 乘法