C言語入門者です。
char型を整数型として、
char型でscanfで入力受付をすると
scanf("%hhd",&変数名);
と書くのは理解できるのですが、この%hhdというのは1バイトすなわちchar型と同じビット数で、書くのは理解できますが、
ASCIIコードというのは127の文字コードを読み取れるのであって、128以上を読み込もうとすると-の値になったりもします。
そんな中で、試したソースコードがあるのですが、
〇試したソースコード
C
1#include<stdio.h> 2int main(void) { 3 4 char num1, num2; 5 6 printf("数字を2つ入力してください。\n"); 7 scanf("%hhd%hhd", &num1, &num2); 8 printf("num1=%hhd num2=%hhd\n", num1, num2); //数字の入力 9 printf("num1==num2・・・%hhd\n", num1 == num2); 10 printf("データサイズは%hhdバイト\n\n", sizeof(num1)); 11 12 return 0; 13}
〇実行結果
数字を2つ入力してください。
10
5
num1=10 num2=5
num1==num2・・・0
データサイズは1バイト
と出ます。
なぜ文字化けなどせずにエラーも起きなく正常に動くのかが不思議なんです。
まだ始めたばかりなので、色々と疑問に思う事はたくさんあるのですが、
現状の僕の考えだと、==という二項演算子はASCIIコードの61と61を二つ使っているので、
%hhdに61と61を格納するには1バイト格納することができなくパンクして、エラーが吐くのではないかと、思ってしまうのです。
演算子が'<'や'+'や'%'で%hhdで表せれるのは納得できますが、なぜ、"=="や"<="などはエラーを吐かずに表せるのでしょうか?
そもそもint型にすれば問題ない話なのですが、どうにも気になり、質問させて頂きました。
回答3件
あなたの回答
tips
プレビュー