zoukankan      html  css  js  c++  java
  • 位运算初学

          逻辑运算与逻辑位移

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

          假设 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    &&  《计算机科学导论》

  • 相关阅读:
    ES6 快速入门
    export,import ,export default区别
    React 生命周期
    Nodejs npm常用命令
    JavaScript:改变 HTML 图像
    WebStorm安装、配置node.js(Windows)
    Flex 布局
    块级元素与行内元素区别
    自动化测试弹框处理
    python远程操作服务器
  • 原文地址:https://www.cnblogs.com/legendtao/p/5073215.html
Copyright © 2011-2022 走看看