2011-09-28 116 views
1

假设我有一个8位数字,我想在每个位置设置1或者0的位置,这是动态的情况。如何在某个位置设置一个二进制数字1或者0

假设例如这样的情况,用户输入两个相等或仅相差一个的数字,并且我希望在每个迭代中从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; 
} 
+2

请作出努力,格式化你的散文和代码的可读的方式。 – spraff

回答

1

我不知道,如果你输入的不同由会发生什么,但你可能想是这样的:

int result = 0; 

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

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

考虑位码移动。

要设置位:

result |= (1<<i); 

取消设置位被留下作为锻炼; Tibial给读者。

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); 
相关问题