タイトル | : Re: Hex と &H の違い |
記事No | : 13284 |
投稿日 | : 2008/12/12(Fri) 10:27 |
投稿者 | : 魔界の仮面弁士 |
> 調べてもどちらも「16進数を表す」としか書いてないので・・。
「16進数とは何の事か」は理解されているという前提でよいのでしょうか?
VB6 における 16進数の表現方法についてのみ記せば良いのか、 それとも、16進数の説明もしておいた方が良いのか分かりませんが、 今回は、16進数そのものの説明は省いておきます。
> では違う数字がaに入るのですが 見ている値が、そもそも違うのです。
2.5時間は、150分間ですよね。 150分間は、2.5時間ですよね。
そしてこれらは、同じ時間を表していますが、 2.5分間や 150 時間とは異なりますよね。
それと同じような事です。
> a = hex(50) 10進数の 50 は、16進数表現では 32 です。 16進数の 32 は、10進数表現では 50 です。
> a = &H50 16進数の 50 は、10進数表現では 80 です。 10進数の 80 は、16進数表現では 50 です。
という事で、値そのものも異なりますが、そもそも『型』も異なります。 なので、両方を同じ変数 a で受けるのは不自然です。
> a = hex(50) この Hex は、「整数値を16進数表記の文字列にするための関数」です。 Hex 関数は文字列を返す物なので、変数 a は String 型でなければなりません。 (たとえば「Hex(255)」は、文字列 "FF" を返します)
> a = &H50 一方、こちらは整数型(通常は Byte, Integer, Long のいずれかの型)です。
> 違いを教えてもらえないでしょうか
Hex(50) … "32" CLng("&H32") … 50 CLng("&H50") … 80 Hex(80) … "50" Hex(&H50) … "50"
なお、Hex 関数に指定可能な値は、長整数型(Long型)の範囲に限られますので、 数値としては、-2147483648〜2147483647 の範囲が対象となります。 Dim s As String s = Hex(50) '文字列の "32" となる
一方 &H は、数値の16進数表記を表す表現です。 リテラルとして記述する場合は、32bit の範囲、すなわち &H0 〜 &H7FFFFFFF, &H7FFFFFFF〜&H80000000 の範囲で指定できます。 Dim a As Long a = &H50 '整数の 80 となる
リテラルではなく、文字列から変換するような場合は、使用可能な桁数は 実行環境に依存します。Windows 98 等では、リテラルと同様に 32bit 制限ですが 最近の環境(XP や Vista など)では、64bit の長さまで利用可能です。 Dim d As Variant d = CDec("&H7FFFFFFFFFFFFFFF") '9223372036854775807 となる
|