如何在某个位置1或0处以二进制形式设置

时间:2011-09-28 13:37:44

标签: c++ binary

假设我有一个8位数,我想在每个位数设置1或0,这是动态情况。

假设例如这种情况,用户输入两个相等或仅相差1的数字,我希望在从0位到7的每次迭代中,以二进制形式编写这些0和1,我该如何实现它在循环中?请帮帮我。

一个例子:

int result = 0;

for (int i = 0; i < 8; i++) {
    int x, y;
    cin >> x >> y;

    if (x == y) {
        // set at i position 0;
    }

    else if ((x-y) == 1) {
        // set  at i position 1;(in result number)
    }
}

更新: 这是我想要实现的: 添加两个8位二进制补码二进制数 这是这个

的代码
#include <iostream>
using namespace std;
int main(){
          int x,y;
          cin>>x>>y;
          int result=0;
          int carry=0;
         int sum=0;
          for (int i=0;i<8;i++){
              sum=carry;
           sum+= (x&(1<<i));
           sum+=(y&(1<<i));
              if (sum>1){
               sum-=2;
               carry=1;
              }
              else{



              carry=0;
              }
              result|=sum;
              result<<=1;



          }

           cout<<result<<" "<<endl;








 return 0;
}

3 个答案:

答案 0 :(得分:4)

您可以使用AND和OR二元运算符更改各个位。

例如:

//set first bit to 1
value |= 1;

//set fourth bit to 0
value &= ~(1<<3);

//set 6th bit to 1
value |= (1<<5);

答案 1 :(得分:1)

考虑比特移位。

设置位:

result |= (1<<i);

取消设置该位作为练习器的剩余部分。

答案 2 :(得分:1)

我不知道如果您的输入因 2 而不同会发生什么,但您可能想要这样的内容:

int result = 0;

for (int i = 0; i < num_bits; ++i) {
    int a, b;
    std :: cin >> a >> b;

    result |= (a != b);
    result <<= 1;
}