このコードの内容が全くもって理解できません。
どなたか一から説明してくだされば幸いです。
include<stdio.h>はこの質問のテンプレートではおかしくなるので省略しています。
int count_bits
int_bits
void_print_bits
これらの関数の内部で何が行われているのかがよくわからないです。
ビット単位の論理演算自体の結果はわかるのですが、それをどうやって演算しているのか?がわかりません。
/*--- 整数x中のセットされたビット数を返す ---*/ int count_bits(unsigned x) { int bits = 0; while (x) { if (x & 1U) bits++; x >>= 1; } return bits; } /*--- unsigned型のビット数を返す ---*/ int int_bits(void) { return count_bits(~0U); } /*--- unsigned型のビット内容を表示 ---*/ void print_bits(unsigned x) { int i; for (i = int_bits() - 1; i >= 0; i--) putchar(((x >> i) & 1U) ? '1' : '0'); } int main(void) { unsigned a, b; printf("非負の整数を二つ入力してください。¥n"); printf("a : "); scanf("%u", &a); printf("b : "); scanf("%u", &b); printf("\na = "); print_bits(a); printf("\nb = "); print_bits(b); printf("\na & b = "); print_bits(a & b); /* aとbの論理積 */ printf("\na | b = "); print_bits(a | b); /* aとbの論理和 */ printf("\na ^ b = "); print_bits(a ^ b); /* aとbの排他的論理和 */ printf("\n~a = "); print_bits(~a); /* aの1の補数 */ printf("\n~b = "); print_bits(~b); /* bの1の補数 */ putchar('\n'); return 0; }
こんばんは、初めての質問ですね、よろしくお願いします。
コードは、コードブロックで囲って頂けると読みやすくなります。 編集画面の </>というボタンです。(再編集してみてください)
質問するときのヒント https://teratail.com/help/question-tips を読んでいなければ読んでみてくださいね。
一からの説明は誰もしてくれません、できるところまで自分で頑張らないと丸投げフラグを付けられてしまいます ^_^;
全くといっても変数の宣言くらいはわかりますよね?
なので、どこまで理解できるか書いた方が、良い回答を得られると思いますよ ^^
私もあまり質問をしないので質問画面に </> があるものと思い込んでいましたが、無いんですね。左下の markdown というところをまず押してみてください。
すいません、上の方にありました。余計なことを言いました。
(笑