私は論理ステートメントとバイナリ算術演算子だけを使って2つの2進数を一緒に追加しようとしています。しかし、私はビットを実際に変更する方法を混乱させる。それは主に変更しようとしている変数ですが、印刷するたびにゼロになっています。あなたのforループの中にこれらのステートメントのそれぞれで32ビット整数のバイトを変更するにはどうすればよいですか?
#include <stdio.h>
void execute_add(int a, int b){
int i = 0;
int bit;
int bit2;
int carryOut = 0;
int out = 10;
int overflow = 0;
for(i = 0; i <32 ; i++){
bit = (a >> i) & 1;
bit2 = (b >> i) & 1;
if(bit==1 && bit2==1 && carryOut == 0){
carryOut = 1;
out = 0 | (0x1 >> i);
}else if(bit==1 && bit2==1 && carryOut == 1){
carryOut = 1;
out = 1 | (0x1 >> i);
}else if(bit==0 && bit2==0 && carryOut == 0){
carryOut = 0;
out= 0 | (0x1 >> i);
}else if(bit==0 && bit2==0 && carryOut == 1){
carryOut = 0;
out = 1 | (0x1 >> i);
}else if(bit==1 && bit2==0 && carryOut == 0){
carryOut = 0;
out = 1 | (0x1 >> i);
}else if(bit==1 && bit2==0 && carryOut == 1){
carryOut = 1;
out = 0 | (0x1 >> i);
}else if(bit==0 && bit2==1 && carryOut == 0){
carryOut = 0;
out = 1 | (0x1 >> i);
}else if(bit==0 && bit2==1 && carryOut == 1){
carryOut = 1;
out = 0 | (0x1 >> i);
}else{
}//if else
}//for loop
printf("\n");
bit = (a >> 31) & 1;
bit2 = (a >> 31)& 1;
int bit3 = (out >> 31) & 1;
if(bit == 1 && bit2== 1 && bit3 == 0){
overflow = 1;
}else if (bit == 0 && bit2 == 0 && bit3 == 1){
overflow = 1;
}else{
}//overflow check
int j;
int g = 0;
for(j = 31; j>=0; j--){
if(g%4==0 && g!=0){
printf(" ");
}
bit2 = (out >> j) & 1;
printf("%d", bit2);
g++;
}
printf("\n");
}
int main(){
int a = 34;
int b = 17;
execute_add(a, b);
return 0;
}
デバッガを使用して、コードを1行ずつステップ実行します。 'bit2 =(out >> i)& 1; '。デバッガを使って答えます。その時点でどの値が「i」ですか? 'i'の代わりに' j'を使うことを意味しましたか? – kaylum
良いキャッチ!しかし、out変数が0であるという問題はまだ残っています。 –
'(0x1 >> i)'は 'i> 0'に対して0です。 – stark