• 逻辑与运算


    逻辑与运算

    任何时候,只要两个表达式的某位都为 1,则结果的该位为 1。否则,结果的该位为 0。

    1&0=0

    0&1=0

    0&0=0

    1&1=1

    逻辑与的性质

    1.可以将任意位清零

    比如与一个00001111 就是将一个8位数的高4位清零,保留低4位。同理也可以与11110000 将低4位清零。

    2.N&(N-1)

    每一次将N二进制从低位到高位第一个1清零。

    相关题目

    1.判断一个数N的奇偶性

    利用性质1 将N&1 也就是将除了最后一位都清零,如果结果是1就是奇数,不然就是偶数。

    2.判断一个数是2的N次方

    因为2的N次方二进制一定是10..00的形式,利用性质2 将N&(N-1) 如果结果是0就是2的N次方。

    3.判断一个二进制数中有多少个1

    解法1.利用性质2 将N = N&(N-1) 直到N==0。因为N&(N-1)一次清零一个1,所以可以统计出有多少个1。

    解法2.还可以用性质1,判断N&1,也就是判断最后一位是不是1,然后N=N>>1 将N右移1位。从低位到高位依次判断1的个数。

    解法3.还可以让N不改变,让N&flag 这个flag初始等于1,以后每次flag<<1。

    其中方法1最好,有几个1就移动几次,方法2,方法3都是N有多少位要移动多少次。

    4.给定两个二进制数M和N,判断M需要改变多少位变成N

    利用 异或性质 ,T=M^N,然后和题目3一样,统计T中1的个数就行了。

    此类题就是考虑二进制的一些形式特点,然后运用与操作就OK了。

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/23lalala/p/2707988.html
Copyright © 2020-2023  润新知