2
私は、KiB, MiB, ..., ZiB, Yib
の値がそれぞれKibiByte, MebiByte, ..., ZebiByte, YobiByte
になるようにしています。バイパスする方法整数をシフトしながらint64の値の制限に移動しますか?
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
オーバーフローの値は行く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
、どのように私はuint64
制限を行って、私は、Pythonを使用してシフトする整数から得ることができるもののようなシフトの整数を使用して、正しい値を取得バイパスすることができます。
ありがとうございました。
感謝。それは完全に動作します。 –