您的位置:首页 > 财经 > 产业 > 肇庆最新疫情情况_美国最新军事新闻_微信裂变营销软件_北京最新消息今天

肇庆最新疫情情况_美国最新军事新闻_微信裂变营销软件_北京最新消息今天

2025/3/17 8:07:51 来源:https://blog.csdn.net/qq_74776071/article/details/146161667  浏览:    关键词:肇庆最新疫情情况_美国最新军事新闻_微信裂变营销软件_北京最新消息今天
肇庆最新疫情情况_美国最新军事新闻_微信裂变营销软件_北京最新消息今天

一.AND &运算

注:两个操作数做&运算结果是不会变大的

二.OR |运算

注:两个操作数做|运算结果是不会变小的

三.XOR(异或) ^运算

注:结果可能变大也可能变小也可能不变,但是不会导致进位,比如两个四位的数字做运算是不会算出五位的。

四.按位取反~

五.左移<<

注:左移操作不要移动到符号位,或者干脆使用无符号数

左移多少位就是相当于乘以2的多少次方

六.右移>>

低位上有1就不要了

注:相当于除以2的幂次方再向下取整

七.判断数字的奇偶性

公式:x & 1

结果为1就是奇数,为0就是偶数。

伪代码:

int x = 10;//01010
//判断奇偶性
if (x & 1 == 1)
{
    cout << "奇数" << endl;
}
else
{
    cout << "偶数" << endl;
}

八.获取二进制数的某一位

公式:x>>i&1   

将二进制数右移,将我要的这位数放在最后一位,然后与1作&

伪代码:

int x = 10;    //01010

//获取二进制数的某一位  01010
cout << "10的二进制数01010第三位为:" << (x >> 3 & 1) << endl;

九.将二进制数的某一位修改为1

公式:x | (1 << i)   

将1也就是00001左移x位,比如左移两位那就是00100,然后作 | 操作,加到x的0上

伪代码:

int x = 10;    //01010

cout << "10的二进制数01010,将最高位修改为1的结果为:" << (x | (1 << 4)) << endl;

十.快速判断一个数是否是2的幂次方

公式:x & (x - 1)

伪代码:

int x = 10;

bool flag = x & x - 1;
if (!flag)  
    cout << "是二的幂次方" << endl;
else    
    cout << "不是二的幂次方" << endl;

十一.获取二进制位中的最低位的1

公式:lowbit(x) = x & -x

complement:

//#include<bits/stdc++.h>
#include<iostream>
using namespace std;

int main()
{
    
    int x = 10;//01010
    //判断奇偶性
    if (x & 1 == 1)
    {
        cout << "奇数" << endl;
    }
    else
    {
        cout << "偶数" << endl;
    }
    //获取二进制数的某一位  01010
    cout << "10的二进制数01010第三位为:" << (x >> 3 & 1) << endl;
    //将二进制数的某一位修改为1
    cout << "10的二进制数01010,将最高位修改为1的结果为:" << (x | (1 << 4)) << endl;
    //快速判断一个数是否为2的幂次方 x & (x - 1)
    bool flag = x & x - 1;
    if (!flag)  
        cout << "是二的幂次方" << endl;
    else    
        cout << "不是二的幂次方" << endl;

    int lowbit = x & -x;
    //获取二进制中最低位的1 lowbit(x) = x & -x
    cout << lowbit << endl;//000010
    return 0;
}

十二.例题

12.1 给定一个整数x,输出这个整数的二进制表示中的1的个数

#include<iostream>
using namespace std;

int main()
{
    
    int x = 11;//01011
    int ans = 0;
    while (x)
    {
        if (x & 1)   
            ans++;
        x >>= 1;
    }
    cout << ans << endl;
    return 0;
}

12.2

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com