逻辑运算符
优先级: ! >> && >> ||
短路规则:
|| 从左向右开始计算,当遇到为真条件时停止计算, 整个表达式为真;所有条件为假时,表达式为假
&& 从左向右开始计算,当遇到为假条件时停止计算, 整个表达式为假;所有条件为真时,表达式为真
C中逻辑符 !只认得0,见了0就返回1.
当其作用值不是0时,其结果为0.
三目运算符
三目运算符(a?b:c)可以作为逻辑运算符的载体
规则:当a的值为真时,返回b的值;否则返回c的值
逗号运算符
逗号运算符
一般形式:表达式1,表达式2,表达式3......表达式n
求解过程:先求解表达式1,再求表达式2....整个逗号表达式的值是表达式1或n的值
1. x=(a=3,6*3) 赋值表达式,将一个逗号表达式的值赋值给x,x的值为18.
2. x=a=3,6*a 逗号表达式,包括一个赋值表达式和一个算术表达式,x值为3
算术运算符
+ - * / %<取模>
作除数和求余,商的正、负和除数有关,和被除数无关
求余时,被除数只可以为整型
位运算符
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
第七位 | 第六位 | 第五位 | 第四位 | 第三位 | 第二位 | 第一位 | 第零位 |
1 <<5 1左移到第五个位置
0x... 0010 0000
位与运算符 (&)
参加运算的两个数据,按二进制位进行“与”运算
运算规则: 0&0=0; 0&1=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 3&5 的值得1
与运算 用途:
(1) 清零 如果想将一个单元清零,只要与一个各位都为零的数值相与,结果为零
(2) 取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1;其余位为零,此数与X相与即可
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可
位或运算符 (|)
参加运算的两个对象,按二进制位进行“或”运算
运算规则: 0|0=0; 0|1=1; 1|1=1;
即: 参加运算的两个对象只要有一个为1,其值为1
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 3|5的值得7
或运算作用:
(1)常用来对一个数据的某些位置1
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零.此数与X相或即可
例: 将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可
异或运算符 (^)
参加运算的两个数据,按二进制位进行“异或”运算
运算规则: 0^0=0; 0^1=1; 1^0=1; 1^1=0
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0
异或运算作用:
(1) 使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可
例: X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可
(2) 与0相异或 保留原值 ,X ^ 0000 0000 = 1010 1110
取反运算符 (~)
参加运算的一个数据,按二进制位进行“取反”运算
运算规则: ~1=0; ~0=1;
即:对一个二进制数按位取反,将0变1,1变0
取反运算作用:
(1) 使一个数的最低位为零,可以表示为:a&~1
~1的值为1111111111111110,再按“与”运算,最低位一定为0.
运算符优先级
~ >> 算术运算符 >> 关系运算符 >> 逻辑运算符
左移运算符 (<<)
将一个运算对象的各二进制位全部左移n位 (高位丢弃,低位补0)
例: a = a << 2 将a的二进制位左移2位,低位补00
左移2位后相当于a = a * 2 *2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2
右移运算符 (>>)
将一个数的各二进制位全部右移n位,正数高位补0,负数低位补1,右边丢弃
操作数每右移一位,相当于该数除以2
例如: a = a >> 2 将a的二进制位右移2位
防错准则
避免位运算符,逻辑运算符和数学运算符同时出现在一个表达式中
如果需要同时运算,尽量用( )来表达计算顺序
小技巧
左移n位相当于乘以2的n次方,效率比数学运算符高
右移n位相当于除以2的n次方,效率比数学运算符高