下記のプログラムはビットごとのANDを使って、
キーボードから入力された文字のASCIIコードをバイナリ表記で表示します。
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
int i;
printf("文字を入力してください: ");
ch = getche();
printf("\n");
/* バイナリ表記を表示する */
for(i=128; i>0; i=i/2)
if(i & ch) printf("1 ");
else printf("0 ");
return 0;
}
【質問】
「バイナリ表記を表示する」部分のコードで、
1バイト(8bit)の最上位ビットは128(2の7乗)の重みがあり、それを初期値に与えて、
「i=i/2」で64,32,16,8,4,2,1と重みが下がっていくというのは分かりますが、
if(i & ch) で、どうして「i & ch」とすることで、バイナリ表記が表示できるのでしょうか?
どなたか教えて頂けないでしょうか?お願いします。
No.2ベストアンサー
- 回答日時:
>これを繰り返すと、バイナリ表記になるんですね?※1
'A'を入力したならば、
出力として
'01000001' ←バイナリ表記
が表示されます。
念のため確認ですが、※1で疑問符がついていますが、「バイナリ表記」って16進のことを指して話していらっしゃいませんよね?
C言語のコンパイル環境があるならば、
コードを実行してみてみるのが手っ取り早いと思います。
もし、'A'を16進で表示させたいのであれば、
シフト演算を使用することになります。
ちなみに表示結果は
"41"
ですね。
>「バイナリ表記」って16進のことを指して話していらっしゃいませんよね?
はい。2進数での表記のことを質問したつもりですが…
ソースコードをコンパイルすると、「A」と入力した場合、
0 1 0 0 0 0 0 1
とエコーされて表示されます。
確認ですが、ANo.1でのお礼に書いた解釈であっているんですよね?
No.3
- 回答日時:
>確認ですが、ANo.1でのお礼に書いた解釈であっているんですよね?
はい、あってますよ。
回答ありがとうございます!!
本当にこの解釈であっているのか不安だったため、安心しました!
専門家の方の回答があると心強いです!!
回答本当にありがとうございました。
No.1
- 回答日時:
たとえばiが128(最上位BITが1)の場合、
chと論理積(&)をとることでchの最上位BITが1であるかを確認できます。
chの最上位BITが1であった場合、この論理積は「真」となり
printf("1")が実行され”1”が画面に出力されます。
「偽」であった場合、”0”が出力され、
この作業を最上位BITから最下位BITまで8回繰り返すことで、
画面上に”1”または”0”の値で構成されたの8桁の数値(バイナリ表記)が表示されます。
よって、
>「i & ch」とすることで、バイナリ表記が表示できるのでしょうか?
は、「「i & ch」を8回繰り返すことでバイナリ表記が表示できる」です。
さっそくの回答ありがとうございます!
「ch = getche();」で、仮に「A」と入力した場合、
「A」の文字コードは65で2進数になおすと01000001になって、
「i & ch」はi=128のとき、
01000001(ch)
10000000(i)
---------------
00000000 論理積
になって0(偽)だから「0」を出力。
i=64のとき、
01000001(ch)
01000000(i)
---------------
01000000 論理積
になって64(0以外、真)だから「1」を出力。
i=32のとき、
01000001(ch)
00100000(i)
---------------
00000000 論理積
になって0(偽)だから「0」を出力。
これを繰り返すと、バイナリ表記になるんですね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
バイナリファイルの比較につい...
-
バッファサイズについて
-
【python】Excelファイルを読み...
-
バイナリーデータの一部データ...
-
入力ファイルをバイナリにする利点
-
テキストデータをバイナリデー...
-
クリップボードからファイル名...
-
Accessからのソケット通信について
-
【Teraterm】filewritelnについて
-
DXFファイル用クラスライブラリ...
-
エンディアンと2の補数表現
-
読み込んだBMPデータの行方
-
テキストデータをSQLServerに取...
-
ROM書き込みデータのファイル形...
-
FTP転送
-
ワードプレスhtmlファイルの保...
-
VBAを使って、一部バイナリデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
VBA バイナリ―から文字列にす...
-
バイナリエディタのつかいかた
-
エクセルVBA 2千万行のCSVファ...
-
EOF
-
ページ読み込み時に自動的にsub...
-
エラー:ストリームの終わりを...
-
画像の保存方法。
-
【python】Excelファイルを読み...
-
MacからWinにファイルを添付す...
-
入力ファイルをバイナリにする利点
-
EXCEL VBAで、バイナリデータの...
-
PHPのfgetcsvの処理容量について
-
VBAを使って、一部バイナリデー...
-
HDDのバイナリイメージの取得方...
-
FTPでエクセルをPUTするとファ...
-
リストビュー ⇔ 別ファイル構...
-
VBScriptでメタデータを取得したい
おすすめ情報