負の表記について


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?
宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:
  • 終了:2012/07/09 21:25:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

ポイント100pt

printf(可変長引数の関数)に渡す時にintに拡張されるのでそのような表示になっているだけです。

# ちなみにcharは8ビットとは限りません。

他2件のコメントを見る
id:Bookmarker

charがintに格上げされることについては、上記リンク先のC FAQをお読みください。手に入るなら書籍版を一読されることをお勧めします。
なお、charは8ビットとは限りませんが、sizeof(char)は必ず1(バイト)です。つまり、C言語において1バイト=8ビットではありません。1バイトのビット数は、マクロCHAR_BITを参照してください。

2012/07/02 22:41:27
id:mizore_chan

ありがとう御座います。

limits.hにCHAR_BITがあるのを確認し、
borland Cコンパイラでは8であることを確認しました。

本はこれですよね。
CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (アジソン ウェスレイ・トッパン 情報化学シリーズ)
ありがとうございます。

2012/07/03 08:51:45

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません