人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

負の表記について

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

●質問者: mizore_chan
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● しおり
●100ポイント ベストアンサー

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

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


しおりさんのコメント
引数の格上げについては、この辺りが参考になるかと。 http://www.kouno.jp/home/c_faq/c15.html#2

mizore_chanさんのコメント
有難う御座います。 表現上なんですね。納得しました。 因みにソースは有りますでしょうか。 あと、charもコンパイラ依存なんですね。何かの時は、size of使わなくてはいけませんね。

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

mizore_chanさんのコメント
ありがとう御座います。 limits.hにCHAR_BITがあるのを確認し、 borland Cコンパイラでは8であることを確認しました。 本はこれですよね。 CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (アジソン ウェスレイ・トッパン 情報化学シリーズ) ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ