読者です 読者をやめる 読者になる 読者になる

各種変数の最大値や最大値超過時の動作は言語によって結構違う。

この前しったんだけど、同じ型名でも最大値とかってかなり違うのね。
てかまあ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





色々ちがって面白い。
しかし、複数の言語を扱っている場合この辺りの挙動が違うことに気をつけておかないとおおきな穴にはまりそうなので気をつけないとですね。