C言語関係掲示板

過去ログ

No.248.printfで1バイトの読み込み


No.1493

なんでなの?
投稿者---hone(2002/05/11 20:07:29)


#include <stdio.h>

void main(void)
{
char a=1,b;
b=~a;
printf("%x\n",b);
}

計算結果がfffffffeになります。
charの変数には1byteしか入らないはずなのに
なんでbにfffffffeが入ってるのでしょうか?
教えてください。。

No.1494

Re:なんでなの?
投稿者---HAO(2002/05/12 03:44:56)


理由は、符号付変数における型変換時の拡張です

charをintにキャストするとき、値が負の場合拡張部分がfで埋められます
0xfe -> 0xfffffffe
これは、intの時でも負となるようにするためです

で、なぜ型変換が行われたかというと、
それはprintfが可変引数だったからです
可変引数部分においては
char,shortはintに、floatはdoubleに暗黙の方変換が行われます

No.1495

Re:なんでなの?
投稿者---kikk(2002/05/12 04:24:57)


ども。


ちょっと前の
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+1353
も参考になると思います。

なお、charがsignedかunsignedか(処理系次第)、また、負数の内部表現に
よって、結果(表示される数値)は異なります。


では。

No.1501

Re:なんでなの?
投稿者---hone(2002/05/13 20:21:31)


どうもありがとうございました。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.06.22
Copyright(c) 2000-2002 TOMOJI All Rights Reserved