私は最近、メッセージでさまざまなスカラー値の型を使用できるようにするGoogle Protocol Buffersについて調べています。
彼らのドキュメントによると、可変長整数プリミティブint32
には 、uint32
、およびの 3 種類がありますsint32
。彼らのドキュメントでint32
は、「負の数をエンコードするには非効率的です。フィールドに負の値が含まれる可能性がある場合は、sint32
代わりに使用してください。」しかし、負の数を持たないフィールドがある場合は、とにかく uint32 を使用する方が適していると思いますint32
(余分なビットと負の数を処理するための CPU コストの削減のため)。
では、いつint32
使用するのに適したスカラーになるのでしょうか? ドキュメントは、負の数がめったに得られない場合にのみ最も効率的であることを暗示していますか? または、フィールドの内容に応じて、常にsint32
andを使用することをお勧めしますか?uint32
(これらのスカラーの 64 ビット バージョンにも同じ質問が適用されます: int64
、uint64
、およびsint64
; しかし、読みやすくするために、問題の説明からそれらを除外しました。)