tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルHex と &H の違い
記事No13282
投稿日: 2008/12/12(Fri) 01:02
投稿者

a = hex(50)
a = &H50

では違う数字がaに入るのですが
調べてもどちらも「16進数を表す」としか書いてないので・・。

読解力のない自分に違いを教えてもらえないでしょうか。><

[ツリー表示へ]
タイトルRe: Hex と &H の違い
記事No13283
投稿日: 2008/12/12(Fri) 01:31
投稿者びだるさすん?
> a = hex(50)
こっちは10進数の「50」を16進数に変換します。

> a = &H50
こっちは16進数の「50」(10進数の80)を表します。

[ツリー表示へ]
タイトルRe: Hex と &H の違い
記事No13284
投稿日: 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 となる

[ツリー表示へ]
タイトルRe: Hex と &H の違い
記事No13301
投稿日: 2008/12/16(Tue) 14:38
投稿者k
びだるさすん?さん
魔界の仮面弁士さん、
ありがとうございました。
よく理解できました^^

[ツリー表示へ]