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次方,和原值是不想等的

  • 相关阅读:
    php1
    c# out参数
    c#冒泡算法
    c#方法 最大值我最小值
    方法
    OUT参数
    芮年
    PHP博客
    数组习题
    从郑和下西洋 到华人爱燕窝
  • 原文地址:https://www.cnblogs.com/chuliang/p/5823001.html
Copyright © 2011-2022 走看看