• 位运算的技巧


    异或(^)

    运算规则:1,0→1

    可以抽象的理解为不进位加法

    异或的性质:

    A^A=0

    A^0=A

    例题 :有一些数两两重复,除了一个数落单,不开辟额外空间,找到那个数。

    思路:让数组内的所有数进行异或运算,最后的结果就是落单的数。


    与(&)

    运算规则:1,1→1

    例题①:求一个二进制数1的个数

    思路:

    1.将数一直>>并与1进行与运算,为true就将个数+1。

    2.一直对该数与该数-1进行与运算(-1后从低位开始到第一个1之间的所有0都变为1,第一个1变为0,这样与初始数与就可以把第一个变为0),直到这个数等于0,统计次数。

    例题②:判断一个数是否是2的整数次方。

    思路:要让这个数是2的整数次,那么这个数的二进制只有一个1。所以可以用用例题①的思路2来解,让这个数和这个数-1进行一次与运算,判断是否是0即可。


    将二进制数奇偶位互换

    思路:将这个数分别和0xaaaaaa

    (1010 1010 1010...取出偶数位)

    0x555555

    (0101 0101 0101...取出奇数位)作与(&)运算。再将保留偶数位的右移一位,保留奇数位左移一位,然后作异或(^)运算。


    0-1之间浮点数的表示(乘2,挪整)

    方法:整个数∗2,取出整数位(从左向右排布),再∗2,直到为0

    举例:0.625

    0.625∗2=1.25,取出1,则这个二进制数为0.1,该数变为0.25

    0.25∗2=0.5,取出0,二进制数变为0.10,该数变为0.5

    0.5∗2=1,取出1,而金属变为0.101,该数变为0,结束循环


    有一些数出现k次,一个数出现1次,求出现1次的那个数

    Tips:k个k进制数作不进位加法运算,结果为0

    方法:有了Tips那么这道题思路应该就清晰了,首先当然要把所有的数转换为k
    进制数啦,然后再把每个数对应位相加,与k取余,再拼起来就是答案辣!

  • 相关阅读:
    linux 如何使用密钥登录 (CentOs)
    linux修改ssh端口 以及禁止root远程登录 (实验机 CentOs)
    查看Windows端口及端口关闭方法
    使用 Linux 终端 SSH 登录 VPS
    修改Chrome默认搜索引擎为Google.com
    Windows 小技巧: 變更輸入法順序
    CentOS 安装BitTorrent Sync详细步骤
    Android手机部分名词浅谈
    PPTP模式跟L2TP模式有什么不同
    .CO域名快被这帮搞IT的玩坏了……
  • 原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634715.html
Copyright © 2020-2023  润新知