C言語の問題で2進数を画面表示するのですが、どう答えたら良いのか分からないです。詳しい解説が出来る人がいれば教えて頂けると幸いです。

画像

C言語関連163閲覧

ベストアンサー

NEW! この回答はいかがでしたか? リアクションしてみよう

mask 変数初期値を16進で設定していますが、2進数でも設定できます。 下記2行は等価コード int mask = 0x80; //- 16進表記 int mask = 0b10000000; //- 2進表記

ThanksImg質問者からのお礼コメント

ありがとうございます

お礼日時:2023/12/4 19:45

その他の回答(1件)

for (i=7 ; i >= 0 ; i--) { printf("%d", (num >> i) & 0x01); } この処理のトレースです。 (01011110 >> 7) & 0x01 = [0000000]0 & 0x01 = 0 (01011110 >> 6) & 0x01 = [000000]01 & 0x01 = 1 (01011110 >> 5) & 0x01 = [00000]010 & 0x01 = 0 (01011110 >> 4) & 0x01 = [0000]0101 & 0x01 = 1 (01011110 >> 3) & 0x01 = [000]01011 & 0x01 = 1 (01011110 >> 2) & 0x01 = [00]010111 & 0x01 = 1 (01011110 >> 1) & 0x01 = [0]0101111 & 0x01 = 1 (01011110 >> 0) & 0x01 = []01011110 & 0x01 = 0 おそらく 0x01 の理由を聞かれると思います。 「1」ではなく「0x01」を使っている理由を推測します。 ビット演算の対象の num は unsigned char型です。 unsigned char型 は1バイトです。 1バイトの16進数は 0x?? と表します。(1の場合は0x01) ビット演算する場合、対象の型に合わせて記述しておいた方が伝わりやすい(もしくは後で修正しやすい)コードになると考えたのだと推測します。