IT이야기

char는 항상 8비트를 가지고 있습니까?

cyworld 2022. 6. 20. 21:38
반응형

char는 항상 8비트를 가지고 있습니까?

나는 항상 생각해 왔다:

  1. char
  2. 바이트는 항상 8비트를 가질 수 있습니다.
  3. 그그sizeof (char) 있다1,
  4. 수 최대 용량(로)chars) RAM(+)을 사용합니다.

하지만 이제 위키피디아 엔트리를 바이트 단위로 읽고 나니 더 이상 잘 모르겠어요.

제 추측 중 어느 것이 틀렸습니까?어떤 것이 위험합니까?

  1. ㅇㅇ.char ★★★★★★★★★★★★★★★★★」byte거의 비슷합니다.한 최소 이며, 1 바이트도 지정 가능한 최소 메모리 양입니다.char 식 c c c로char1로 하다

    사양 섹션 3.6 바이트에서:

    바이트

    실행 환경의 기본 문자 집합의 멤버를 수용할 수 있을 만큼 충분히 큰 데이터 스토리지의 주소 지정 가능 단위

    섹션 3.7.1 문자:

    성격

    바이트
    <<C>

  2. A char 있다CHAR_BIT비트. 임의의 숫자(스펙에 따르면 8 이상)가 될 수 있지만 대부분의 경우 8이 됩니다. 및 16비트 32비트를 가진 실제 .char하다, 하다, 타타타 다타다 CHAR_BIT되어 있습니다.limits.h

    사양 섹션 5.2.4.2.1 정수형 크기:

    아래 값은 전처리 지시사항에 사용하기에 적합한 상수 표현으로 대체해야 한다.또한, 및 를 제외하고, 다음은 정수승진에 따라 변환된 해당 유형의 객체 표현과 동일한 유형의 표현으로 대체해야 한다.구현 정의 값은 같은 부호로 표시된 값과 크기(절대값) 이상이어야 합니다.

    : 가 비트필드(바이트)가 아닌 최소 객체의 비트 수
        CHAR_BIT                               8

  3. sizeof(char) == 1★★★★★★ 。

    규격 섹션 6.5.3.4 조작자 항목 3에서:

    타입이 , 또는 (또는 그 수식 버전)인 오퍼랜드에 적용하면 결과는 1이 됩니다.

  4. 시스템에서 할당 가능한 만큼의 메모리를 할당할 수 있습니다.표준에는 할당량을 규정하는 것은 없습니다.예를 들어 클라우드 스토리지 백업 메모리 할당 시스템을 갖춘 컴퓨터가 할당 가능 메모리가 사실상 무한대라고 가정할 수 있습니다.

    완전한 사양 섹션 7.20.3.3은 다음과 같습니다. 기능:

    개요

    1개
       void *malloc(size_t size);

    묘사

    2 함수는 크기가 지정되고 값이 불확실한 객체에 공간을 할당합니다.

    돌아온다

    3 함수는 늘 포인터 또는 할당된 공간에 대한 포인터를 반환합니다.

    이것이 사양의 전부이기 때문에 신뢰할 수 있는 제한이 없습니다.

sizeof(char)는 항상 1바이트입니다.단, 바이트가 반드시1 옥텟은 아닙니다.를 들어 Texas Instruments TI C55x는 16비트 바이트를 가진 DSP입니다.

sizeof(char).1C99(으) :

type char, unsigned char 또는 signed char 또는 signed char(또는 그 수식 버전)를 가진 오퍼랜드에 적용하면 결과는 1이 됩니다.

단, 8비트는 보증되지 않습니다.실제로 대부분의 플랫폼에서는 그렇게 됩니다만, 기술적으로 항상 그렇게 된다고는 할 수 없습니다(사용하는 것이 중요한 것도 아닙니다).sizeof(동료)

구체적으로는 특히 DSP 필드의 일부 아키텍처는 8비트보다 큰 char:s를 가집니다.실제로는 속도를 위해 메모리 공간을 희생합니다.

C에서 char는 항상 1바이트이므로 첫 번째와 세 번째 가정은 정확합니다.

단, 바이트가 항상 8비트는 아니기 때문에 두 번째 가정이 항상 유효한 것은 아닙니다.즉, 현재 존재하는 모든 시스템의 >= 99.99%가 8비트 문자를 사용하므로 많은 코드가 암묵적으로 8비트 문자를 가정하고 모든 대상 플랫폼에서 정상적으로 실행됩니다.확실히 Windows와 Mac 머신은 항상 8비트 문자를 사용하고, AFIK Linux도 마찬가지입니다(Linux는 많은 플랫폼에 포팅되어 있기 때문에, 누군가가 Linux를 9비트 문자가 유효한 플랫폼으로 포팅하지 않았다고 100% 확신할 수 없습니다).

할당할 수 있는 최대 메모리 용량은 가상 메모리 크기에서 운영 체제에 예약된 공간을 뺀 값입니다.

불행히도 (혹은 사물을 어떻게 보느냐에 따라서는) 바이트가 일반적으로 (8비트)로 생각되는 것에 대한 개념이 C 프로그래밍 언어가 바이트로 간주하는 것과 동의어가 아니라는 것입니다.앞의 몇 가지 답변을 보면, 바이트는 C 프로그래밍 언어에 관한 정확한 정의를 가지고 있으며, 정의 어디에도 바이트가 8비트라고 언급되어 있지 않습니다.단순히 1바이트가

"실행 환경의 기본 문자 집합 구성원을 모두 수용할 수 있을 만큼 충분히 큰 데이터 스토리지의 주소 지정 가능 단위입니다."

그래서 당신의 질문에 답하기 위해, "그것은,char"항상 8비트를 가지고 있다"는 질문에 대한 답은 항상은 아니지만 대부분 그럴 것입니다.데이터 타입이 시스템에서 소비하는 공간의 비트수를 정확하게 확인하려면 , 다음의 코드 라인을 사용할 수 있습니다.

sizeof(type) * CHAR_BIT

어디에,type는 사용자의 데이터 유형입니다.예를 들어, v-in-in-in-in-in-in-in-in-in-char는 시스템을 점유합니다.다음 항목을 사용할 수 있습니다.

printf("The number of bits a 'char' has on my system: %zu\n", sizeof(char) * CHAR_BIT);

이것은 GNU C 라이브러리 레퍼런스 매뉴얼에서 인용한 것입니다.이 매뉴얼에는 이 항목에 대한 다음과 같은 설명이 포함되어 있습니다.

C 언어에는 정수 데이터 유형의 비트 수를 제공할 수 있는 연산자가 없습니다.단, 헤더 파일 제한에 정의되어 있는 매크로 CHAR_BIT에서 계산할 수 있습니다.h. CHAR_B.IT - 이것은 1 문자당 비트 수이며, 대부분의 시스템에서는 8비트입니다.값의 유형은 int입니다.다음과 같이 모든 데이터 유형의 비트 수를 계산할 수 있습니다.

    `sizeof (type) * CHAR_BIT` 

이 표현에는 패딩 비트뿐만 아니라 값 및 부호 비트가 포함됩니다.

전통적으로 바이트는 8비트가 아니라 메모리의 작은 영역이며 보통 하나의 문자를 저장하기에 적합합니다.C 표준은 이 사용법을 따르므로 malloc 및 sizeof에서 사용되는 바이트는 8비트보다 클 수 있습니다.[각주] (본 기준에서는 이 기준을 충족하지 못한다.)

그러나 sizeof(char)는 항상 1입니다.

C FAQ를 암기하는 것은 경력 강화 조치입니다.

언급URL : https://stackoverflow.com/questions/9727465/will-a-char-always-always-always-have-8-bits

반응형