c言語で、charは、8ビットですが、 負の数を表そうとすると32bit表記になるようです。 この理由を教えてください。 #include <stdio.h> void main(void) { signed char a = -10; printf("%d\n",a); printf("%x\n",a); } 実行時 -10 fffffff6 <---何故4byte? 宜しくお願いします。
printf(可変長引数の関数)に渡す時にintに拡張されるのでそのような表示になっているだけです。# ちなみにcharは8ビットとは限りません。
引数の格上げについては、この辺りが参考になるかと。http://www.kouno.jp/home/c_faq/c15.html#2
有難う御座います。表現上なんですね。納得しました。因みにソースは有りますでしょうか。あと、charもコンパイラ依存なんですね。何かの時は、size of使わなくてはいけませんね。
charがintに格上げされることについては、上記リンク先のC FAQをお読みください。手に入るなら書籍版を一読されることをお勧めします。なお、charは8ビットとは限りませんが、sizeof(char)は必ず1(バイト)です。つまり、C言語において1バイト=8ビットではありません。1バイトのビット数は、マクロCHAR_BITを参照してください。
ありがとう御座います。limits.hにCHAR_BITがあるのを確認し、borland Cコンパイラでは8であることを確認しました。本はこれですよね。CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (アジソン ウェスレイ・トッパン 情報化学シリーズ)ありがとうございます。
コメントはまだありません
これ以上回答リクエストを送信することはできません。制限について
ログインして回答する
charがintに格上げされることについては、上記リンク先のC FAQをお読みください。手に入るなら書籍版を一読されることをお勧めします。
2012/07/02 22:41:27なお、charは8ビットとは限りませんが、sizeof(char)は必ず1(バイト)です。つまり、C言語において1バイト=8ビットではありません。1バイトのビット数は、マクロCHAR_BITを参照してください。
ありがとう御座います。
2012/07/03 08:51:45limits.hにCHAR_BITがあるのを確認し、
borland Cコンパイラでは8であることを確認しました。
本はこれですよね。
CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (アジソン ウェスレイ・トッパン 情報化学シリーズ)
ありがとうございます。