2017-05-29 11 views
0

私は最初のprintf文の出力は49である。しかし、他の1が91を14641に変換され、どのよう14641.を示している?このchar型(char配列ではない)のマルチchar変数はC言語でどのように処理されますか?

#include<stdio.h> 



int main(void){ 

char charVal1 = '1'; 
char charVal2 = '91'; 

printf("%d\n", charVal1); 
printf("%d", charVal2); 
} 

を試してみましたかまた、暗黙の変換によってオーバーフローが発生し、出力が49になることがあります。

答えて

1

システムでは、文字 '1'は49としてエンコードされます。Cでは '1' ... '9'あなたのシステム '9'でその順序と連続的なものは57としてエンコードされています。したがって、 '91'は57に続いて49でエンコードされます。16進数では、この0x39の後に0x31が続きます。ビッグエンディアンのバイト順序で2バイト整数(おそらくshort [別名short int])をビッグエンディアンのバイト順序とみなす場合、0x3931または14641です。したがって、マシンはビッグエンディアンのバイト順序を使用します。

「91」intcharより大きく、charである、私のシステムで値14641.とINTので、その範囲外の整数でcharを割り当てる128 -128である、コンパイラの警告を与えます。

これで、フォーマットされた印刷呼び出しでは、通常の長さの整数である "%d"形式指定子が使用されます。これは、システム上の整数が10進数に変換されて出力される多くのバイトを変換することを意味します。それは整数としてこれらの値を印刷しているので、しかし、あなたはそれをchar値を渡している、または91および14641.


あなたは、おそらくより、このようなものを意味する:

char[] strVal1 = "1"; 
char[] strVal2 = "91"; 

printf("%s\n", strVal1); 
printf("%s", strVal2); 
+0

ありがとうございました。 !! :) – smartnerd

関連する問題