位运算(&、|、^、~、>>、<<)总结

目录

1.位运算概述

2.符号 

3.常用的功能:

4.运用:

题目描述

输入描述

输出描述


​​​​​​​

1.位运算概述

        从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

2.符号 

1)与运算 &  有0则0 无0则1  可以用来判断奇偶 x&1==0 说明x是偶数

2)或运算|有1位1 无1为0

3)异或运算 ^ 相同为1 不同为0

4)<<        二进制左移

5)  >>        二进制右移

6)~         取反

3.常用的功能:

1.交换二个数 a^=b^=a^=b;

2.判断奇偶 x&1

3.判断二个数是否相同 a^b==0 说明ab相等

4.判断多个数字中只出现一次的数字 ans^=x 多次 最后ans的值就是那个数字

4.运用:

1.描述
给你一个整数数列,保证只有一个数出现过奇数次,输出它。
输入
多组测试数据。 每组测试数据第一行为一个整数n,代表该数列元素个数。(1 <= n <= 500000) 第二行为n个整数ai,以空格隔开。(-1000000 <= ai <= 1000000)
输出
输出一行表示这个出现奇数次的数。

int main(){
    int n;
    while (cin>>n) {
        int ans=0;
        over(i,1,n){
            int x;
            cin>>x;
            ans^=x;
        }
        cout<<ans<<endl;
    }
}

 2.

题目描述

icebound通过勤工俭学,攒了一小笔钱,于是他决定出国旅游。这天,icebound走进了一个神秘的神殿。神殿由八位守护者守卫,总共由6464个门组成,每一道门后都有一个迷宫,迷宫的大小均为100×100100×100。icebound在迷宫中总共耗时TT小时,消耗食物KK公斤。历经千辛万苦之后,icebound终于穿越了迷宫,到达了神殿的中心。神殿的中心有一个宝箱。宝箱上显示有两个正整数ll和rr。icebound苦思冥想,终于发现一些打开宝箱的线索。你需要找到一个数PP,它具有一个美妙的性质:它是[l,r][l,r]中所有数的二进制表示里,11的个数最多的一个数。如果你发现了这个美妙的数字,你就可以打开宝箱,获得巨额财富。

比如[4,8][4,8]中:

4: 0100
5: 0101
6: 0110
7: 0111
8: 1000

二进制表示中11的个数最多的数是77,它含有33个11。

输入描述

输入一行,两个正整数:ll和rr,用空格隔开,代表神殿中宝箱上显示的数。

1≤T<2311≤T<231,

1≤K≤1051≤K≤105,

1≤l≤r≤2×1091≤l≤r≤2×109

输出描述

一个十进制数P,代表满足条件的解。如果有多个P满足条件,输出最小的P。

样例输入

4 8

样例输出

7

我们可以根据

n|(n+1)一定会比n的二进制多一个一而且还是从低位向高位加一

int main(){
    ll l,r;
    cin>>l>>r;
    while ((l|(l+1))<=r) {
        l|=(l+1);
    }
    cout<<l<<endl;
}

猜你喜欢

转载自blog.csdn.net/m0_57006708/article/details/120615069