位运算初学

      逻辑运算与逻辑位移

      位运算说穿了,就是直接对整数在内存中的二进制位进行操作。在计算机中的位运算符有如下这么几种:(&按位与)   (|按位或)  (^按位异或)   (~按位取反) ,优先级我们不谈。每个位运算实际的效果:

      假设 1  为真,这其实和数学里一样的

      与运算:0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1       同为真则表现为真,其余均为假

      或运算:0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1     同为假则表现为假,其余均为真

      异或: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0   2个值不同,则为真,相同则为假

      取反:真 , 取反 , 为假  

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      移位运算用来将整型或字符型数据作为二进位信息串作整体移动。我们可以把移位运算分为2类,A:逻辑移位  B:算术移位

      逻辑左移位或者右移位都是移动后,空出的位置补 0

    (假设位模式是使用的二进制补码方式存储的带符号的整数)

      算术左移位丢弃符号位,接收新的位作为符号位,如果新的符号位与以前相同,则移位成功,否则发生溢出(上溢下溢)

      算术右移位保留符号位,丢弃最右边的位

   位模式:10011001  (-53)         

      进行算术右移位后:110011000 (符号位保留,之前最右边的1丢弃,最右边补0) -52

      位模式:11011001(-39)      

      进行算术左移位后:10110010(符号位被以前的第二位1替换了,最右边补0) -78

      

      逻辑运算和逻辑位移为我们提供了操作位模式的工具。请看下文:

假设有一个模式在判断过程中需要用此模式的第三位(h g f e d c b a),也就是说我们需要知道这个 c  到底是 0 还是 1.

      操作方法:

             逻辑右移一次:   0 h g f e d c b

             逻辑右移第二次: 0 0 h g f e d c

             AND                 0 0 0 0 0 0 1

             如果结果是 0 ,那么目标位就是 0; 反之如果结果是 1 ,则目标位是 1

      平时的开发位模式运算用的比较少~~~ CC++底层中用的比较多,节省资源,提升"效率"~

      笔者手打本文,各方资料请参考:http://blog.sina.com.cn/s/blog_60e96a410100mjd2.html    &&  《计算机科学导论》

原文地址:https://www.cnblogs.com/legendtao/p/5073215.html