16進変換で不具合
値を10進、16進の相互変換を行いたいのですが、いまいちうまく行かずに困っています。
小さな桁数なら実現できているのですが、大きくすると変になります。
まず、10進→16進は作ることが出来ました。(計算機の16進変換と合っているので・・・)
10000081000008100000を16進にすると
8AC76CAFD29DA8A0になります。
で、今度は8AC76CAFD29DA8A0を10進にしたいのですがうまくいかないのです。
計算的にはこんな感じです。どこかおかしいですか?
0...1 * 0 = 0
A...16 * 10 = 160
8...256 * 8 = 2048
A...4096 * 10 = 40960
D...65536 * 13 = 851968
9...1048576 * 9 = 9437184
2...16777216 * 2 = 33554432
D...268435456 * 13 = 3489660928
F...4294967296 * 15 = 64424509440
A...68719476736 * 10 = 687194767360
C...1099511627776 * 12 = 13194139533312
6...17592186044416 * 6 = 105553116266496
7...281474976710656 * 7 = 1970324836974592
C...4503599627370500 * 12 = 54043195528446000
A...72057594037927900 * 10 = 720575940379279000
8...1152921504606850000 * 8 = 9223372036854800000
でこれを足すだけだと思ったのですが、
なぜかperlで一つずつ足すと10000081000008123880となります・・・
ここでexcelで検算をしてみたのですが、なぜか合いました。
0
160
2048
40960
851968
9437184
33554432
3489660928
64424509440
687194767360
13194139533312
105553116266496
1970324836974590
54043195528446000
720575940379279000
9223372036854800000
-----------------
10000081000008100000
でもおかしくないですか???1の位を手計算で足すとわかるのですが、
0になるわけが無いのです。
いったい何がどうなっているのか・・・
どうか助けてください。
お礼
大変分かりやすい説明でした。 本当にありがとうございました。