zoukankan      html  css  js  c++  java
  • L19_11 位运算实例

    题目:
    位运算实例,已知一个正整数变量(a),对这个数的二进制数列进行下面的操作,依次使用位运算符号写出操作方式:

    1)将最后一位的右边加上一个(1),例如(101)变为(1011)

    答:将(101)左移一位,然后加(1),就是((a<<1)+1)

    2)将最后一位变为(0),例如(1010)或者(1011)处理后都变成(1010)

    答:
    方法一:最后一位直接变成(0) 不太好办,可以直接变成(1),然后再想办法减去(1)就行了:构造一个数字(1),然后用(a)(1)进行按位取,就把最后一位变成了1,其它各位保留原来的样子:((a|1)-1)

    方法二:构造一个前面都是(1),最后一位是(0)的家伙,然后与原来的数字进行与运算,就可以把最后一位变成(0),其它各位不变。那么,什么数字是前面都是1,最后一位是0呢?这就需要单独记忆一下了:(-2)的二进制表示就是前面都是1,最后一位是0.
    原因:
    原码 0010
    反码 1101
    补码 1110

    3)取末5位序列,例如(1101 1010)处理后得到(11010)

    答:构造一个右边5个是1,左边都是0的数,然后两者相与。就是 000...00 11111,而这个前面都是0,后5个是1的数字,就是$ (1<<5)-1$ ,所以表达式:(n& ((1<<5)-1))

    4)去掉序列中最右边的1的左边所有数字,例如1101 1000 取到右边的1000

    答:就是保留最右边的那个1,这是位运算的经典方法:(a & (-a))

  • 相关阅读:
    OpenCV——Skewing
    OpenCV——PS滤镜算法之Spherize 球面化(凸出效果)
    机器学习 scikit-learn 图谱
    机器视觉 Histogram of oriented gradients
    Python: scikit-image canny 边缘检测
    机器视觉 Local Binary Pattern (LBP)
    Ice php配置
    Windows7下的免费虚拟机(微软官方虚拟机)
    经常使用的webservice接口
    怎样衡量一个公司是否靠谱
  • 原文地址:https://www.cnblogs.com/littlehb/p/15160258.html
Copyright © 2011-2022 走看看