0
点赞
收藏
分享

微信扫一扫

Java 中的面向对象编程 (OOP) 概念

半夜放水 2024-08-14 阅读 28

基础位运算

常用位计算

给一个数n,确定它的二进制表示中的第x位是0还是1

#include <iostream>

bool checkBit(int n, int x) {
    // 生成掩码,1 左移 (x-1) 位
    int mask = 1 << (x - 1);
    // 按位与操作,检查第 x 位
    return (n & mask) != 0;
}

int main() {
    int n = 13;  // 二进制表示为 1101
    int x = 3;

    if (checkBit(n, x)) {
        std::cout << "第 " << x << " 位是 1" << std::endl;
    } else {
        std::cout << "第 " << x << " 位是 0" << std::endl;
    }

    return 0;
}

将一个数n的二进制表示的第x位修改成1

#include <iostream>

int setBitToOne(int N, int x) {
    // 生成掩码,1 左移 (x-1) 位
    int mask = 1 << (x - 1);
    // 按位或操作,设置第 x 位为 1
    return N | mask;
}

int main() {
    int N = 13;  // 二进制表示为 1101
    int x = 2;

    int result = setBitToOne(N, x);

    std::cout << "修改后的结果是: " << result << std::endl;  // 输出修改后的数值
    //std::cout << "二进制表示: " << std::bitset<8>(result) << std::endl;  // 输出二进制表示

    return 0;
}

将一个数n的二进制表示的第x位修改成0

#include <iostream>

int clearBitToZero(int N, int x) {
    // 生成掩码,1 左移 (x-1) 位
    int mask = 1 << (x - 1);
    // 对掩码取反,然后与 N 进行按位与操作
    return N & ~mask;
}

int main() {
    int N = 13;  // 二进制表示为 1101
    int x = 3;

    int result = clearBitToZero(N, x);

    std::cout << "修改后的结果是: " << result << std::endl;  // 输出修改后的数值

    return 0;
}

提取一个数n二进制表示中最右侧的1

#include <iostream>

int extractRightmostOne(int n) {
    return n & -n;
}

int main() {
    int n = 18;  // 二进制表示为 10010

    int result = extractRightmostOne(n);
    
    std::cout << "最右侧的1: " << result << std::endl;  // 输出结果
    std::cout << "二进制表示: " << std::bitset<8>(result) << std::endl;  // 输出二进制表示

    return 0;
}

删除一个数n二进制表示中最右侧位的1

#include <iostream>

int clearRightmostOne(int n) {
    return n & (n - 1);
}

int main() {
    int n = 18;  // 二进制表示为 10010

    int result = clearRightmostOne(n);

    std::cout << "清除最右侧的1后的结果: " << result << std::endl;  // 输出结果

    return 0;
}
举报

相关推荐

0 条评论