我是靠谱客的博主 彩色鲜花,最近开发中收集的这篇文章主要介绍位操作leetcode,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

知识背景
计算机存储形式为二进制,二进制存在三种不同表示形式:原码,反码,补码

原码:从左往右读数,第一位为符号位,0代表正,1表示负
反码:反码是建立在原码的基础上,正数的反码是本身,负数的反码是符号位不变,其余取反!!!!!!
补码:补码也是建立在原码的基础上,正数的补码不变,负数符号位不变,其余取反,然后加1

1的 原码:0000 0001
反码 0000 0001
补码 0000 0001
-1的原码 1000 0001
反码: 1111 1110
补码 1111 1111

按位操作
按位非~:对所有二进制进行直接取反
按位与&:两个二进制数据的对应位都为1时,才为1
按位或|:两个二进制数据的对应位只要一个为1时,就为1
按位异或^(满足交换律与结合略):两个二进制数据的对应位不相同时,才为1

a = 0001 0011 [19]
b = 1000 1010 [-10]
~a=1110 1100 [-108]
a&b=0000 0010 [2]
a|b=1001 1011 [-27]
a^b = 1001 1001 [-25]

按位左移<<:
nums<<i将nums的二进制数进行左移i位
按位右移>>:
nums>>i nums的二进制数进行右移i位
在这里插入图片描述

重点:异或a^0=a, a ^a=0;a ^b ^c = a ^c ^b

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int tem = 0;
        for(int i:nums)
        tem = tem^i;
        return tem;
       
    }
};

异或操作可以用于交换数据,但是前提是两个数据不在同一空间

(x == y) || ((x ^= y), (y ^= x), (x ^= y)) 

参考
深入理解计算机中的原码、补码、反码

最后

以上就是彩色鲜花为你收集整理的位操作leetcode的全部内容,希望文章能够帮你解决位操作leetcode所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部