Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

printfの表示はこれで正常なのでしょうか?

お世話になります
CS+のRX63Tで開発しています
以下のようなソースですが
int a;
long b;
a=-5;
b=(long)a;
printf("a=%d(%04X) b=%ld(%08lX) \r",(int)a,(int)a,b,b);
printf("%d \r",(int)sizeof(a));
これを実行すると
a=-5(FFFFFFFB) b=-5(FFFFFFFB)
2
が表示されます
intのサイズが2Byteであるにもかかわらず
printfで指定した%04Xが無視されて4Byte分のFFFFFFFBが
表示されております、これはC言語の仕様なのでしょうか?

  • In reply to IKUZO:

    IKUZOさん
    懐かしい方々いっぱいいらっしゃいますね。
    担当技術者から管理職になって実務から離れると、かふぇルネからも遠ざかってしもうケースが多いような気がします。
    それと、世間的にはARMとかPICの方が受けがいい部分もあるので、そっちに行っちゃってるかもです。
  • In reply to Kirin:

    Kirinさんは最初からですから、
    多くの方をご存知ですね、
    わたくしも途中からお邪魔して、
    いろいろな方に助けていただいていますが
    昔のことも教えていただいたりして、
    非常に親近感があります、
    本当にありがたく思っていますが
    「ARMとかPIC」とかも人間ですから
    必死で頑張って来ますからね
    Renesasも負けないようにしないとです。
  • 「RX ファミリ C/C++コンパイラ、
    アセンブラ、最適化リンケージエディタ
    コンパイラパッケージ V.1.01 ユーザーズマニュアル」

    を読んで、皆さんの回答の裏付けが取れました。417、418頁です。

    417/869頁
    (d) パラメータのサイズ指定
    d,i,o,u,x,X,e,E,f,g,G 変換の時(表9.34 参照)
    変換するデータのサイズ(short 型、long 型、long long 型、long double 型)を指定し
    ます。これ以外の変換の時は、本指定を無視します。表9.33 にサイズ指定の種類とその意味
    を示します。

    418/869頁 「表 9.34 変換文字と変換の方式」 を見ると、「int 型」となっています。

    417/869頁 「表 9.33 パラメータのサイズ指定の種類とその意味」 を見ると、
    「int 」以外はshort , long, long long の3種類で、char は無い。

     すなわち char  は黙っていれば int に変換される。
     短くしたくても short までしかサポートされていない。
     short  が2バイトなら、16進4桁になってしまい2桁にはならない。
  • In reply to リカルド:

    リカルドさん
    いろいろ調べてくださってますね、d,i,o,u,x,X,e,E,f,g,G の意味はだいたいわかるのですが
    %04Xを%04hX hというのは初めてでした、04Xとした場合 0の場合は4桁でFの場合は8桁になる、
    ただhを追加して%04hXとすると0の場合もFの場合も4桁になる、初めて知って、奥が深いと思いました。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page