Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

16進数のバイト数

16進数のバイト数を出力させます。 printf("%d byte\n",sizeof(0x12)); ⇒4 byte 4bit×2=8bit(1byte)になると思ったのですが、なぜ4byteになるのでしょうか。 基礎的なことかもしれませんが、原因が分からず悩んでしまいました。 もしお分かりの方いらっしゃいましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

示されたコードは未定義の動作になる可能性がありますので、なんともいえません。 ただ、0x12はint型です。 処理系不明なのでint型およびsize_t型のサイズはわかりませんが、size_t型がunsigned int型に定義されており、かつint型のサイズが4バイト(32ビットとは限りません)であれば、4 byteと出力されるでしょう。 size_t型がunsigned int型以外に定義されている場合の動作は未定義です。これを回避するには、書式文字列を"%zu byte\n"とするか、(int)sizeof(0x12)のように明示的にキャストしなければなりません。

upcast
質問者

お礼

丁寧な解答ありがとうございます。 完全に理解できました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

単に「0x12」と定数が書かれているだけでは、デフォルトでint型と認識されます。 したがって、32bitの値として扱われているのです。

upcast
質問者

お礼

回答ありがとうございます。 納得しました。

すると、全ての回答が全文表示されます。

関連するQ&A