为了账号安全,请及时绑定邮箱和手机立即绑定

填空第i位替换

填空第i位替换

C++
Leolihao3147377 2016-05-22 23:13:23
写出函数中缺失的部分,使得函数返回值为一个整数,该整数的第i位和m的第i位相同,其他位和n相同。请使用【一行代码】补全bitManipulation1函数使得程序能达到上述的功能#include <iostream> using namespace std; int bitManipulation1(int n, int m, int i) {// 在此处补充你的代码} int main() { int n, m, i, t; cin >> t; while (t--) {  cin >> n >> m >> i; cout << bitManipulation1(n, m, i) << endl; } return 0; }输入第一行是整数 t,表示测试组数。每组测试数据包含一行,是三个整数 n, m 和 i (0<=i<=31)输出对每组输入数据,每行输出整型变量n变化后的结果样例输入1 1 2 1样例输出3提示二进制的最右边是第0位
查看完整描述

1 回答

?
asd8532

TA贡献143条经验 获得超187个赞

用&运算符
例如:得出1101 0011的第5位,
1101 0011&(1<<5)即可

#define SZ_UINT sizeof(unsigned int)

class Bitfield
{
protected:
    unsigned int *pField_;
    unsigned int  uBitCount_;

public:
    Bitfield (int bc);
    ~Bitfield ();
// 指定bit位为1
    int set (int bit);
// 返回bit位值
    int get (int bit);
// 指定bit位为0
    int reset (int bit);
};

Bitfield::Bitfield (int bc)
{
    uBitCount_ = bc;
    pField_ = (unsigned int*) malloc(((int) ceil(bc/SZ_UINT*8)));
}

Bitfield::~Bitfield ()
{
    if (pField_)
        free(pField_);
}

int Bitfield::set (int bit)
{
    if (bit >= uBitCount_ || !pField_)
        return -1;
    pField_[bit/SZ_UINT] |= (0x00000001 << (bit%(SZ_UINT*8)-1));
    return 0;
}

int Bitfield::reset (int bit)
{
    if (bit >= uBitCount_ || !pField_)
        return -1;
    pField_[bit/SZ_UINT] &= ~(0x00000001 << (bit%(SZ_UINT*8)-1));
    return 0;
}

int Bitfield::get (int bit)
{
    if (bit >= uBitCount_ || !pField_)
        return -1;
    return (pField_[bit/SZ_UINT] & (0x00000001 << (bit%(SZ_UINT*8)-1)) ? 1 : 0);
}


查看完整回答
1 反对 回复 2016-05-23
  • 1 回答
  • 0 关注
  • 2591 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信