AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

常用二进制的相关操作

作者: 作者的头像   以梦为马 ,  2020-03-25 11:35:47 ,  阅读 236


2


求n的第k位数字

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

int main(){
    int n, k;
    cin >> n >> k;

    cout << (n >> k & 1) << endl;//输出n对应的二进制数的第k位

    //将n对应的二进制数,从第k位~第0位依次输出
    for(int j = k; j >= 0; j --) cout << (n >> j & 1) << ' ';

    return 0;
}

改变i的第j位数字(0变1, 1变0)

#include <iostream>

using namespace std;

int n;

int main(){
    cin >> n;//15 ---二进制数:1111
    cout << (n ^ (1 << 2)) << endl;//结果为11,对应二进制数为1011
    cout << (n - (1 << 2)) << endl;//结果为11,对应二进制数为1011
    /** 当n的二进制数第2位是1的时候,n ^ (1 << 2) 等价于 n - (1 << 2) */
    /**第k位的右侧异或和减的结果相同,第k+1位往左两种运算的结果也相同,仅有第k位才可能发生变化,
    /**当第k位为1时,二者运算结果相同*/
    return 0;
}

lowbit(x)

作用:返回最后一个1
举例:lowbit(10) = lowbit(1010) = lowbit(10) = 2;
注意:在 C++里, -x = ~ x + 1

int lowbit(int x){
    return x & - x;
}

二进制中1的个数

2 评论


用户头像
wu   3个月前     回复

n ^ (1 << 2) 等价于 n - (1 << 2)这个有问题吧,比如n = 11时n ^ (1 << 2)结果为15,而n - (1 << 2)结果为7

用户头像
以梦为马   3个月前     回复

是的,少了个前提,多谢大佬提醒。

你确定删除吗?

© 2018-2020 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息