この前しったんだけど、同じ型名でも最大値とかってかなり違うのね。
てかまあVB6が特殊なだけなんだけど。
VB6のIntegerはJavaでいうShortの値しか扱えない。(Cならshort int)
VB6 | Java,C,VB2005 | 最小値 | 最大値 |
---|---|---|---|
Integer | Short | -32,768 | 32,767 |
Long | Integer | -2,147,483,648 | 2,147,483,647 |
また、最大値を超えたときの動作も言語によって異なる。
Java、C
JavaとCはとても想像通りの動きで循環してマイナス最大値になる。
2147483647 + 1 = -2147483648 MAX_VALUE + 1 = MIN_VALUE
こんな感じ。FEとか情報基礎でならったそのままって感じ。
http://becomehappy.orz.hm/smithlog/article.php?id=370
「最大値の次は?」
VB6
VB6の場合オーバーフローでエラーとなる。
32,767 + 1 ⇒ オーバーフロー
PHP
Int最大値を超えるものはfloatに変換される
http://programming-magic.com/?id=69
Ruby
Fixnumで数値(整数値)を扱っているが上限を超えた場合自動的にBignumに変換される。
尚、Bignumは無限多倍長整数でメモリの許す限りの大きな値を扱うことができる。
とってもふとっぱらですね。
http://www.namaraii.com/rubytips/?%BF%F4%C3%CD
色々ちがって面白い。
しかし、複数の言語を扱っている場合この辺りの挙動が違うことに気をつけておかないとおおきな穴にはまりそうなので気をつけないとですね。