1

uint8_tanが 8 ビットであることはどこでどのように保証されますか?

N3242 を掘り下げる - 「ワーキング ドラフト、プログラミング言語 C++ の標準」、セクション 18.4.1 < cstdint > 概要には -

       `typedef unsigned integer type uint8_t; // optional`

したがって、本質的に、C++ 標準準拠ライブラリを定義する必要はまったくありませんuint8_t

更新: おそらく、標準のどの行が uintN_t 型が N ビットであると言っているのですか?

4

3 に答える 3

6

C++ から:

18.4.1 ヘッダーの概要

... ヘッダーは、C 標準の 7.18 と同じように、すべての関数、型、およびマクロを定義します。...

C から:

7.20.1.1 正確な幅の整数型

1 typedef 名 intN_t は、幅 N 、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t は、正確に 8 ビット幅の符号付き整数型を示します。

2 typedef 名 uintN_t は、幅 N でパディング ビットのない符号なし整数型を指定します。したがって、 uint24_t は、正確に 24 ビット幅の符号なし整数型を示します。

3 これらのタイプはオプションです。ただし、実装が、幅が 8、16、32、または 64 ビットで、パディング ビットがなく、2 の補数表現を持つ (符号付きの型の場合) 整数型を提供する場合、対応する typedef 名を定義する必要があります。


したがって、本質的に、uint8_t を定義するために C++ 標準準拠ライブラリはまったく必要ありません。

正しい。typedefNikos が (+1) を述べたように、が存在しない/宣言されていない場合は、代替手段が必要です。

于 2013-02-23T09:51:05.710 に答える
3

タイプは、<stdint.h> C99 標準を参照して定義されます。

C99 ドラフト N869 §7.17.1.1/2 :
「typedef 名Nは、幅Nの符号なし整数型を指定します。したがって、 正確に 24 ビット幅の符号なし整数型を示します。」uint_tuint24_t

C99 §7.18/4により、型が によって定義されている場合は<stdint.h>、それに関連付けられているマクロも定義されており、型が定義されていない場合は、関連付けられているマクロも定義されていません。

したがって、マクロ (C99 §7.18.2.1 で必要) の有無を使用して、型定義UINT8_MAXの有無を確認できます。uint8_t

于 2013-02-23T09:57:44.497 に答える
1

uint8_t幅は 8 ビットであることが保証されています。存在しない場合は、明らかに使用できません。しかし、そこにあるとすれば、それは 8 ビットです。提供されている可能性はありませんが、8ビットではありません。

于 2013-02-23T09:36:14.133 に答える