2016-10-05 10 views
-1

私はここでは新しいですが、私のComputing 2 HWに関するいくつかの質問がありました。我々はset_flag、およびcheck_flagを完了することになっており、その表示になっているビット演算子

void set_flag(int* flag_holder, int flag_position); 
int check_flag(int flag_holder, int flag_position); 

int main(int argc, char* argv[]) 
{ 
    int flag_holder = 0; 
    int i; 
    set_flag(&flag_holder, 3); 
    set_flag(&flag_holder, 16); 
    set_flag(&flag_holder, 31); 
    for(i = 31; i >= 0; i--) { 
     printf("%d", check_flag(flag_holder, i)); 
     if(i % 4 == 0) 
      printf(" "); 
    } 
    printf("\n"); 
    return 0; 
} 

1000 0000 0000 0001 0000 0000 0000 1000

今、私は本当に理解するのに苦労してい

は、主な機能を考えますこの。全部で0に等しいとされるflag_holderですか?私の教授はビットごとに乗算を使用すると言っていました。しかし、私はちょうど32 '0の配列を実装し、3番目、16番目、および31番目の要素を0に設定できるように見えますか?私は乱雑な設定のために事前にお詫びし、実際にこれを読んで助けてくれた人に感謝します!

+1

に影響を与えることなく、設定されていることである「私は散らかっセットのために事前に謝罪しますあなたは本当にすべてのコードを1行に書いていますか?いずれにしても、人々が実際にあなたを助けることができるように、私はそれを修正しました。 –

+0

また、コードをすべて表示していないときに、あなたの問題が何であるかを知っている人はいますか? 'set_flag'と' check_flag'を実装している場合、それらが動作するかどうか知っていますか?これを修正してください。 –

+3

"しかし、私はちょうど32 '0の"の配列を実装することができるように見えます。あなたはそうすることができますが、それは運動のポイントではありません。あなたは 'int'変数のビットを操作するつもりです。それで、あなたが私たちに何を望んでいるのかは分かりません。 – kaylum

答えて

0

私はあなたが1でたわごと2を去ったとき、すべてのビットがにシフトしている&右シフト左シフト

乗算とビット単位の間の類似性がフラグを設定するために使用されているほとんど

2 = 0010 

あなたを教えてみましょう左にゼロが付加されています。

0010 << 1 
0100 

結果が

0100 = 4 

さらにあろう左0100

1000 = 8左シフトを行うシフトする2 掛けと同様であり、右シフトが2

で割ると同様です

設定フラグ

set_flag(&flag_holder, 3); 

機能は、多かれ少なかれ、これは何をするか、この

void set_flag(int *flag_holder, int shifter) { 
*flag_holder = *flag_holder | 1 << shifter; 
} 

ようになりますが、3番目のビットが他のビット