62

と の間に違いはuintありunsigned intますか?

私はこのサイトを見ていますが、すべての質問は C# または C++ に関するものです。C言語について回答お願いします。

関連する場合は、LinuxでGCCを使用していることに注意してください。

4

6 に答える 6

83

uintは標準タイプではありませんunsigned int

于 2011-04-15T14:14:06.043 に答える
42

システムによっては、uint を typedef として定義する場合があります。

typedef unsigned int uint;

これらのシステムでは、それらは同じです。ただし、uint は標準型ではないため、すべてのシステムでサポートされていない可能性があり、移植性がありません。

于 2011-04-15T14:18:37.590 に答える
18

Erik、Teoman Soygul、taskinoor による回答を少し広げています。

uintは標準ではありません。

したがって、次のような独自の省略形を使用することはお勧めできません。

typedef unsigned int uint;

stdint.hを含め、代わりにプラットフォーム固有性を探す場合 (たとえば、int が占有するビット数を指定する必要があります) :

#include <stdint.h>

次の整数の標準カテゴリを公開します。

  • 特定の正確な幅を持つ整数型

  • 少なくとも特定の指定された幅を持つ整数型

  • 少なくとも特定の指定された幅を持つ最速の整数型

  • オブジェクトへのポインターを保持するのに十分な幅の整数型

  • 幅が最大の整数型

例えば、

正確な幅の整数型

typedef 名 int N _t は、幅 N、パディング ビットなし、および 2 の補数表現の符号付き整数型を指定します。したがって、int8_t は、幅がちょうど 8 ビットの符号付き整数型を示します。

typedef 名 uint N _t は、幅 N の符号なし整数型を示します。したがって、uint24_t は、幅がちょうど 24 ビットの符号なし整数型を示します。

定義する

int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
于 2013-08-03T13:29:30.047 に答える
8

unsigned int組み込み (標準) 型であるため、プロジェクトをクロスプラットフォームにしたい場合unsigned intは、すべてのコンパイラでサポートされることが保証されているため、常に使用してください (したがって、標準です)。

于 2011-04-15T14:18:49.960 に答える
1

Theuintは の適切な省略形ですunsigned int。読みやすくなっています。ただし: C 標準ではありません。自分の責任で (他のすべての定義と同様に) 定義して使用できます。残念ながら、一部のシステム ヘッダーも定義されuintています。私はsys/types.h現在のコンパイラ(ARM)から見つけました:

 # ifndef   _POSIX_SOURCE
  //....
 typedef    unsigned short  ushort;     /* System V compatibility */
 typedef    unsigned int    uint;       /* System V compatibility */
 typedef    unsigned long   ulong;      /* System V compatibility */
 # endif    /*!_POSIX_SOURCE */

これは、Unix System V 標準としてプログラムされたおなじみのソースに対する譲歩のようです。この望ましくない動作をオフにするには (

#define uint unsigned int 

自分で、最初に設定しました

#define _POSIX_SOURCE

システムのヘッダーは、標準ではないものを定義してはなりません。しかし、残念ながら、そこで定義されていることがたくさんあります。

私の Web ページhttps://www.visia.org/emc/html/Base/int_pack_endian.html#truean-uint-problem-admissibleness-of-system-definitionsも参照してください。https://www.visia.org/emc .

于 2021-04-30T12:14:10.707 に答える