zoukankan      html  css  js  c++  java
  • 逻辑位运算

    负数在内存中是用补码表示,顾名思义就是和其对应的正数相补

    比如-2:

    1111111……1110

    和2相加正好溢出,也就是互补

    比如~5取反:

    5是0000000……00101

    取反:1111111111……11010

    这个数值和6正好互补,所以~5的值是-6

    再比如,判断一个int值a是2的次方,除了判断a & (a-1) == 0 ,

    可以通过这样:a & -a == a

    先看充分性,2的n次方的形式都是

    000……00010……0

    这样,补码都是

    111……11110……0这样

    相与是和原值相等,

    再看必要性,如果不是000……001000……00这种只有一位上有1的,而是多于一个位数上是1,比如随便找个位数

    000^00100100,那么它的补码就是

    111^11011100,相与就是最低位上的2的n次方,和原值是不想等的

  • 相关阅读:
    socket
    netstat
    列表
    突然发现不会写代码了
    算法资源
    bit位操作
    排序算法
    连续子数组最大和
    books
    凸优化
  • 原文地址:https://www.cnblogs.com/chuliang/p/5823001.html
Copyright © 2011-2022 走看看