◆ 符号なし32ビット整数で4294967295(2^32-1)から、さらに+1するとどーなる?
こんばんワイン。どーもボキです。

符号なし32bit整数、Cならunsigned long、DelphiならCardinal。
この符号なし整数は、0 ~ (2^32)-1、つまり0 ~ 4294967295 まで格納できる。

4294967295 のとき、さらに+1するとどーなるか?


答え、0 になる。
4294967295(10)= FFFFFFFF(Hex)
 ↓
 ↓+1
 ↓
4294967296(10)=100000000(Hex)
したから8桁(4バイト=32ビット)使われるので、0になる。

なら、4294967295 よりも大きい値をカウントしたいときはどうしたらいいと思う?
↓↓



上位桁の変数を別に用意して、カウント値を求めるときは倍精度浮動小数点型を使う。
倍精度浮動小数点型ってのは、C&Delphiともdouble型ね。

たとえば、
 double型の変数 = (double)(4294967295) ×上位桁 + 下位桁
ってな具合に。

右辺は何もしなければすべて整数なので、doubleでキャストするのを忘れずに。
キャストし忘れると、上位桁が桁落ちしてしまうからね。

double型なら、15桁まで有効だから999兆までカウントできる。そんなに使わんが。


ちなみに、VBScriptは変数はすべてVariant型で確保されているため、
変数の値によって、勝手に型が変わるようだ。

符号付16bit(vbInteger) --> 符号付16bit(vbLong) --> 倍精度浮動小数点(vbDouble)
といった感じにね。

[PR]
by yozda | 2011-06-30 00:08 | SE♂日誌 | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/12994798
トラックバックする(会員専用) [ヘルプ]
<< アナログ放送終了まであと23日 わたくし山田は、上場企業勤めで... >>