2

KiB, MiB, ..., ZiB, YibGo を使用して、それぞれの値を取得しようとしています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 を使用して整数をシフトすることで取得できるように、整数をシフトすることで正しい値を取得するにはどうすればよいでしょうか。

ありがとう。

4

1 に答える 1