人力検索はてな
モバイル版を表示しています。PC版は
こちら
負の表記について
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.
このページの先頭へ
□
対応機種一覧
□
お問い合わせ
□
ヘルプ
/
お知らせ
□
ログイン
□
無料ユーザー登録
□
はてなトップ