負の表記について


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/02 21:21:21
  • 終了:2012/07/09 21:25:04

ベストアンサー

id:Bookmarker No.1

しおり回答回数191ベストアンサー獲得回数342012/07/02 21:53:31

ポイント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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません