首页 > 代码库 > 运算符 结晶

运算符 结晶

逻辑运算符

优先级:  !  >>   &&   >>  ||

短路规则:

||  从左向右开始计算,当遇到为真条件时停止计算, 整个表达式为真;所有条件为假时,表达式为假

&& 从左向右开始计算,当遇到为假条件时停止计算, 整个表达式为假;所有条件为真时,表达式为真




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


算术运算符

 + - *  /  %<取模>

作除数和求余,商的正、负和除数有关,和被除数无关

求余时,被除数只可以为整型


位运算符




10101001
第七位第六位第五位第四位第三位第二位第一位第零位

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次方,效率比数学运算符高