• ベストアンサー

16進数の変換処理

VisualBasic6.0で Val("&H" & "F") を実行すると、15 Val("&H" & "FF") を実行すると、255 Val("&H" & "FFF") を実行すると、4095 Val("&H" & "FFFF") を実行すると、-1 Val("&H" & "FFFFF") を実行すると、1048575 という結果が得られます。 なぜ”FFFF”の時に”-1”が返ってくるのでしょうか? また、どうやったら、 ”FFFF”から”65535”が得られるのでしょうか? 教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

VAL関数 指定した文字列に含まれる数値を適切なデータ型に変換して返します。 FFFFは、INT型で扱える最大値なのでINT型と判定されます。 cint("&H"+"FFFF")だと、-1が返ります。 FFFFFは、INTの扱える値を超えたのでLONG型で判定される為に1048575と言う結果になるのです。 では、なぜマイナスになるのか? FFFFを2進数で表すと以下のようになりますね。 11111111 11111111 11111111 11111111 ↑先頭の1バイト目が1だとマイナスとして扱われます。 以上です。

noname#5252
質問者

お礼

解かりました! すっごくよく理解できました。 本当にありがとうございました。

その他の回答 (1)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

clng("&H"+"FFFF") csng("&H"+"FFFF") cdbl("&H"+"FFFF") 上記3点なら、65535で帰ってきますよ。 要するに、うまく扱えないとかって理由です。 (詳しい事は・・・勘弁して(^^;)

関連するQ&A