10

公式文書によると、uint64 は 64 ビットの符号なし整数です。それは、uint64 の数値がどれほど小さくても大きくても、8 バイトのストレージを使用する必要があることを意味しますか?

編集:

みんなの答えをありがとう!

binary.PutUvarintが大きな を格納するために最大 10 バイトを消費することに気付いたときuint64、最大uint64で 8 バイトしかとらないはずなのに、疑問を投げかけました。

次に、Golang lib のソース コードで私の疑問に対する答えを見つけました。

Design note:
// At most 10 bytes are needed for 64-bit values. The encoding could
// be more dense: a full 64-bit value needs an extra byte just to hold bit 63.
// Instead, the msb of the previous byte could be used to hold bit 63 since we
// know there can't be more than 64 bits. This is a trivial improvement and
// would reduce the maximum encoding length to 9 bytes. However, it breaks the
// invariant that the msb is always the "continuation bit" and thus makes the
// format incompatible with a varint encoding for larger numbers (say 128-bit).
4

4 に答える 4

1

単純なルールを覚えておいてください。変数の型は通常、特定のメモリ空間に適合するように最適化され、最小メモリ空間は 1 ビットです。8 ビット = 1 バイト:

したがって、64 ビット = 8 バイト

于 2013-06-25T09:00:56.537 に答える
1

簡単に言えば、はい、64 ビットの固定サイズの整数型は常に 8 バイトを使用します。そうでない場合は、異常な言語になります。

メモリ内のストレージが値に依存する可変長の数値型をサポートする言語/プラットフォームがありますが、そのような単純な方法で型のビット数を指定することはできません。

于 2013-06-25T05:47:29.290 に答える
1

Go プログラミング言語仕様

数値型

数値型は、整数値または浮動小数点値のセットを表します。事前に宣言されているアーキテクチャに依存しない数値型は次のとおりです。

uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

はい、正確に 64 ビットまたは 8 バイトです。

于 2013-06-25T05:47:58.477 に答える