KiB, MiB, ..., ZiB, Yib
Go を使用して、それぞれの値を取得しようとしていますKibiByte, MebiByte, ..., ZebiByte, YobiByte
。
Golang での私のコードは次のとおりです。
package main
import (
"fmt"
)
func main() {
s := []string{"KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}
for k,v := range(s) {
fmt.Printf("%s: %v\n", v, 1 << uint64(10 * (k+1)))
}
}
しかし、ZiB and YiB
オーバーフローGoの値uint64
と、これが私がこの出力を持っている理由です:
KiB: 1024
MiB: 1048576
GiB: 1073741824
TiB: 1099511627776 // exceeds 1 << 32
PiB: 1125899906842624
EiB: 1152921504606846976
ZiB: 0 // exceeds 1 << 64
YiB: 0 // exceeds 1 << 64
Python3
それ以外の場合は、このコード内で同じシフト ロジックを使用します。
a = ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]
for k,v in enumerate(a):
print("{}: {}".format(v, 1 << (10 *(k+1))))
以下の出力のように、出力は正しいです。
KiB: 1024
MiB: 1048576
GiB: 1073741824
TiB: 1099511627776
PiB: 1125899906842624
EiB: 1152921504606846976
ZiB: 1180591620717411303424
YiB: 1208925819614629174706176
では、Gouint64
の制限を回避し、Python を使用して整数をシフトすることで取得できるように、整数をシフトすることで正しい値を取得するにはどうすればよいでしょうか。
ありがとう。