문제

이것은 다음 질문과 관련이 있습니다.

c에서 32 비트 정수를 선언하는 방법

몇몇 사람들은 INT가 항상 대부분의 플랫폼에서 32 비트라고 언급했습니다. 이것이 사실인지 궁금합니다.

크기가 다른 int를 가진 최신 플랫폼을 알고 있습니까? 8 비트 또는 16 비트 아키텍처가있는 공룡 플랫폼을 무시하십시오.

노트: 나는 이미 다른 질문에서 32 비트 정수를 선언하는 방법을 알고 있습니다. 이것은 다른 크기의 정수를 지원하는 플랫폼 (CPU/OS/컴파일러)을 찾기위한 설문 조사와 비슷합니다.

도움이 되었습니까?

해결책

몇몇 사람들이 말했듯이, 'int'가 32 비트가 될 것이라는 보장은 없습니다. 특정 크기의 변수를 사용하려면, 특히 비트 조작과 관련된 코드를 작성할 때 '표준 정수 유형'의무를 사용해야합니다. C99 사양에 의해.

int8_t
uint8_t
int32_t
uint32_t

등...

그것들은 일반적으로 [u] intn_t 형식이며, 여기서 'u'는 당신이 서명되지 않은 수량을 원한다고 지정하고 n은 비트 수입니다.

이것들에 대한 올바른 typedef는 stdint.h에서 사용할 수 있어야합니다.

다른 팁

"이다 언제나 32 비트 켜기 대부분 플랫폼 " - 그 스 니펫에 무슨 문제가 있습니까? :-)

C 표준은 많은 적분 유형의 크기를 의무화하지 않습니다. 그것 하다 예를 들어 상대 크기의 의무 sizeof(int) >= sizeof(short) 등등. 또한 최소 범위를 의무화하지만 여러 인코딩 체계 (2의 보완, 보완 및 부호/크기)를 허용합니다.

특정 크기의 변수를 원한다면 사용하는 플랫폼에 적합한 하나를 사용해야합니다. #ifdefS, 같은 것 :

#ifdef LONG_IS_32BITS
    typedef long int32;
#else
    #ifdef INT_IS_32BITS
        typedef int int32;
    #else
        #error No 32-bit data type available
    #endif
#endif

또는 C99 이상은 정확한 너비 정수 유형을 허용합니다. intN_t 그리고 uintN_t:


  1. 그만큼 typedef 이름 intN_t 너비의 서명 된 정수 유형을 지정합니다 N, 패딩 비트가없고 2의 보완 표현. 따라서, int8_t 정확히 8 비트의 폭이있는 서명 된 정수 유형을 나타냅니다.
  2. 그만큼 typedef 이름 uintN_t 너비의 서명되지 않은 정수 유형을 지정합니다 N. 따라서, uint24_t 정확히 24 비트의 비율로 서명되지 않은 정수 유형을 나타냅니다.
  3. 이러한 유형은 선택 사항입니다. 그러나 구현이 너비가 8, 16, 32 또는 64 비트 인 정수 유형을 제공하는 경우, 패딩 비트가없고 (서명 된 유형의 경우) 2의 보완 표현이있는 경우 해당 대응을 정의해야합니다. typedef 이름.

이 순간에 대부분의 데스크탑 및 서버 플랫폼은 32 비트 정수를 사용하며, 많은 임베디드 플랫폼 (핸드 헬드 암 또는 x86)도 32 비트를 사용합니다. int에스. 16 비트에 도달합니다 int 당신은 실제로 매우 작아야합니다 : "버클리 mote"또는 작은 Atmel Atmega 칩 중 일부를 생각하십시오. 그러나 그들은 거기에 있습니다.

작은 임베디드 시스템은 16 비트 정수를 사용합니다.

컴파일러에 크게 의존합니다. 일부는 64 비트 기계에서 64 비트로 컴파일하고 일부는 32 비트로 컴파일합니다. 임베디드 시스템은 자체의 작은 왁스 공입니다.

확인하기 위해 할 수있는 가장 좋은 방법 :

printf("%d\n", sizeof(int));

주목하십시오 sizeof 바이트를 인쇄합니다. 하다 sizeof(int)*CHAR_BIT 비트를 얻으려면.

다양한 유형의 비트 수를 인쇄하는 코드 :

#include <limits.h>
#include <stdio.h>

int main(void) {
    printf("short is %d bits\n",     CHAR_BIT * sizeof( short )   );
    printf("int is %d bits\n",       CHAR_BIT * sizeof( int  )    );
    printf("long is %d bits\n",      CHAR_BIT * sizeof( long )    );
    printf("long long is %d bits\n", CHAR_BIT * sizeof(long long) );
    return 0;
}

대부분의 ARM 기반 프로세서는 16 비트 모드 인 Thumb Code를 실행할 수 있습니다. 여기에는 아직 전용으로 인한 안드로이드 노트북과 출혈 엣지 스마트 폰이 포함됩니다.

또한 일부 그래프 계산기는 8 비트 프로세서를 사용하며 상당히 현대적인 프로세서를 호출합니다.

TI는 여전히 C55X DSP와 함께 OMAP 보드를 판매하고 있으며 주로 비디오 디코딩에 사용됩니다. 이를 위해 제공된 컴파일러에는 16 비트 int가 있다고 생각합니다. 공룡은 거의 없지만 (Nokia 770은 2005 년에 출시되었습니다) 32 비트 DSP를 얻을 수 있습니다.

대부분의 코드는 DSP에서 실행되지 않는다고 안전하게 가정 할 수 있습니다. 그러나 아마도 전부는 아닙니다.

비트 수 대신 실제 최대/최소값에 관심이있는 경우 한계 .H 알고 싶은 모든 것을 포함합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top