まだ初心者なのでプログラムではなくて環境等の問題かもしれないのですが、、
どうにも自力で(友人に聞いても)解決できない壁にぶつかったので質問させていただきます。
<問題点>
特定箇所のprintf()関数において%xで表示させる数値が32bit(4バイト)分表示され
変数のサイズを越える部分が'f'で埋められる
<状況>
C言語プログラム(本文末尾に出力結果とともにペースト)をBCC ver.5.5で
コンパイルしてWindows XP Home上のMS-DOSプロンプトで実行すると、
添付画像ならびに文末画面出力2行目の指示して無い文字
("0xffffff80"の"fffff")が出力される。
コンパイルはエラーもなくできます。
sizeof(chr_y)を表示させても1としか表示されない。
変数の型を変更した場合、
(signed char)の場合は0xffffff80
(signed short int)の場合は0xffff8000
といった具合に、単純に変数を表示しているだけなのですが、
どういうわけか符号付整数において先頭(符号)ビットに1が立って
他のビットが0の場合だけに表示がおかしくなるのかな・・・。
'f'ではなく'0'なら"%08x"とかいたかな・・とかわかるのですが。。。
<環境>
WindowsXP Home (SP2) (i386)
BCC32.exe(Version 5.5)
<希望>
勝手に出てくる文字'f'を表示しない方法がお分かりになる方が
いらっしゃいましたらご指南いただきたく思います。
又は、手元の環境では問題が無いという方がいらっしゃいましたら、
参考までに教えていただけますでしょうか?
<以下ソースとか画面に表示される内容>
----プログラムここから----
#include<stdio.h>
//10進と16進で数字を表示するプログラム
int main(void){
signed char chr_x, chr_y;
unsigned char uchr_x, uchr_y;
chr_x = uchr_x = 0x7f;
chr_y = uchr_y = 0x80;
printf("in case of signed char\n");
printf(" 0x%x + 0x01 = 0x%x \n", chr_x, chr_y);
printf(" %d + 1 = %d \n\n", chr_x, chr_y);
printf("in case of unsigned char\n");
printf(" 0x%x + 0x01 = 0x%x \n", uchr_x, uchr_y);
printf(" %d + 1 = %d \n\n", uchr_x, uchr_y);
return(0);
}
----プログラム終わり----
----出力結果ここから-----
in case of signed char
0x7f + 0x01 = 0xffffff80
127 + 1 = -128
in case of unsigned char
0x7f + 0x01 = 0x80
127 + 1 = 128
----出力結果終わり----