programing

uint와 부호 없는 int의 차이점?

minecode 2022. 8. 18. 22:50
반응형

uint와 부호 없는 int의 차이점?

와 어떤 차이가 있습니까?uint그리고.unsigned int?

이 사이트를 보고 있습니다만, 모든 질문은 C# 또는 C++에 관한 것입니다.C언어에 대한 답변을 듣고 싶습니다.

관련된 경우 Linux에서 GCC를 사용하고 있습니다.

uint표준 타입이 아닙니다.unsigned int이에요.

시스템에 따라 int를 typedef로 정의할 수 있습니다.

typedef 부호 없는 int;

이러한 시스템에서는 동일합니다.단, uint는 표준 타입이 아니기 때문에 모든 시스템이 지원하지 않을 수 있으므로 휴대할 수 없습니다.

Erik, Teoman Soygul, taskinoor의 답변을 조금 연장합니다.

uint는 표준이 아닙니다.

따라서 다음과 같이 자신의 속기를 사용하는 것은 권장되지 않습니다.

typedef unsigned int uint;

대신 플랫폼 고유성을 찾는 경우(예를 들어 stdint를 포함하여 int 점유 비트 수를 지정해야 합니다).h:

#include <stdint.h>

는 다음과 같은 정수의 표준 카테고리를 표시합니다.

  • 일정한 정확한 너비를 가진 정수형

  • 적어도 특정 특정 너비를 가진 정수 형식

  • 지정된 최소 너비가 있는 가장 빠른 정수 유형

  • 개체에 대한 포인터를 저장할 수 있을 만큼 넓은 정수 형식

  • 폭이 가장 큰 정수형

예를 들어.

정확한 폭의 정수형

typedef name int N _t는 너비 N, 패딩 비트 없음 및 2의 완성을 나타내는 부호 있는 정수 유형을 지정합니다.따라서 int8_t는 정확히 8비트의 폭을 갖는 부호 있는 정수형을 나타냅니다.

typedef name uint N _t는 너비가 N인 부호 없는 정수 유형을 지정합니다.따라서 uint24_t는 정확히 24비트의 폭을 갖는 부호 없는 정수형을 나타냅니다.

정의하다

int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t

여기 있는 모든 답변에는 실제 이유가 언급되어 있지 않습니다.uint.
그것은 명백하게typedefunsigned int그렇다고 해서 유용성이 설명되는 것은 아닙니다.

진짜 질문은,

왜 누군가가 기본 유형을 축약 버전으로 입력하려고 합니까?

타이핑을 절약하기 위해?
아니요, 그들은 필요해서 그렇게 했어요.

템플릿이 없는 언어인 C언어를 생각해 보겠습니다.
어떤 타입이든 가능한 자신의 벡터를 어떻게 찍어낼 수 있을까요?

넌 보이드 포인터로 뭔가를 할 수 있어
그러나 템플릿을 에뮬레이션하면 매크로에 의존하게 됩니다.

템플릿 벡터를 정의합니다.

#define define_vector(type) \
  typedef struct vector_##type { \
    impl \
  };

유형을 선언합니다.

define_vector(int)
define_vector(float)
define_vector(unsigned int)

그리고 세대를 거듭할 때, 그 유형은 하나의 토큰이어야 한다는 것을 깨달으십시오.

typedef struct vector_int { impl };
typedef struct vector_float { impl };
typedef struct vector_unsigned int { impl };

uint의 가능한 적절한 줄임말입니다.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

시스템의 헤더는 표준이 아닌 것을 정의해서는 안 됩니다.하지만 안타깝게도 거기에는 많은 것들이 정의되어 있습니다.

웹 페이지 https://www.vishia.org/emc/html/Base/int_pack_endian.html#truean-uint-problem-admissibleness-of-system-definitions response에서도 참조하십시오.https://www.vishia.org/emc 를 참조해 주세요.

unsigned int을 사용하는 '(표준)'을 사용합니다.unsigned int모든 컴파일러에서 지원되는 것을 보증하기 때문입니다(표준으로 되어 있습니다).

언급URL : https://stackoverflow.com/questions/5678049/difference-between-uint-and-unsigned-int

반응형