位运算(力扣)

补码:先按正数转换,然后取反加1。

要将十进制的-10用二进制表示,先将10用二进制表示:

0000 0000 0000 1010

取反:

1111 1111 1111 0101

加1:

1111 1111 1111 0110

所以,-10的二进制表示就是:1111 1111 1111 0110

按位与、按位或、按位异或(一样为0)(任何数与0异或,结果都是其本身)、取反

利用异或实现两数交换 a = a ^ b   b = b ^ a   a = a ^ b;

例题如下

class Solution {
public:
    vector<int> swapNumbers(vector<int>& numbers) {
        numbers[0]=numbers[0]^numbers[1];
        numbers[1]=numbers[0]^numbers[1];
        numbers[0]=numbers[0]^numbers[1];
        return numbers;
    }
};

左移>>、右移<<

异或性质:若a^b=c,则a^c=b,即【异或本身就是异或的逆运算】

下面是一道解码题

class Solution {
public:
    vector<int> decode(vector<int>& encoded, int first) {
        vector<int>ans(encoded.size()+1);
        ans[0]=first;
        for(int i=1;i<ans.size();++i){
            ans[i]=ans[i-1]^encoded[i-1];
        }
        return ans;
    }
};

给定一个数算它变0的步骤

class Solution {
public:
    int numberOfSteps (int num) {
        //判断num最后1位是否为1,可以用来判断奇偶性
        if(!num)return 0;
        int i;
        for(i=0;num;num>>=1){
            i=(num&1)?i+2:++i;
        }
        return --i;
    }
};

 二进制转化为十进制

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int getDecimalValue(ListNode* head) {
        int ans=0;
        while(head){
            ans<<=1;
            ans|=head->val;//这个好像是先加然后整体乘2
            head=head->next;
        }
        return ans;
    }
};

列出数组的全部子集(没看明白啊)

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> ret;
        ret.push_back({});
        int size=nums.size();
        int subsize=pow(2,size);
        int hash=1;
        while(hash<subsize){
            vector<int> temp;
            for(int k=0;k<size;k++) {
                int a=1<<k;
                if(a&hash) {
                    temp.push_back(nums[k]);
                }
            }
            ret.push_back(temp);
            hash++;
        }
        return ret;
    }
};

 

Guess you like

Origin blog.csdn.net/qq_45598881/article/details/115214327