写出函数中缺失的部分,使得函数返回值为一个整数,该整数的第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 回答
- 0 关注
- 2646 浏览
添加回答
举报
0/150
提交
取消
