カテゴリー
未分類

32 ビットを超えたときのuintの挙動

32bitを超えた値だと、超過部分が-1に変化してしまう。
つまりこんな挙動になる。

結果

0 @ 4294967295
1 @ 99
2 @ 98
3 @ 198
4 @ 197
finish 197

ややこしいね。
例えば

とすると

0 @ 4294967205
1 @
2 @ 8
3 @ 108
4 @ 107
finish 107

こーなる。
ああ面倒くさい。
ちなみにNumberは53 ビットまで使用可能なので、Numberで計算するとこんな感じになる。

最後にuintに変換した部分は、また超過部分が-1で演算されるので答えは同じになってしまうけど・・。

0 @ 4294967205
1 @ 4294967305
2 @ 8589934600
3 @ 8589934700
4 @ 12884901995
finish 12884901995
to uint = 107