ANSI(C89/90) C에서 바이트를 나타내는 데 사용할 유형?
ANSI (C89/90) C에서 바이트를 나타내는 표준 불만 방법이 있습니까?대부분의 경우 문자가 바이트가 되는 경우가 많다는 것을 알고 있지만, 제가 알기로는 이러한 경우가 보장되지 않습니다.또한 C99 표준에는 stdint.h가 있습니다만, C99 이전에는 무엇을 사용했습니까?
구체적으로 8비트와 '바이트'((x) == 1의 크기) 모두 궁금합니다.
char항상 바이트이지만 항상 옥텟은 아닙니다.바이트는 주소 지정 가능한 최소 메모리 단위(대부분의 정의에서)이며 옥텟은 8비트 메모리 단위입니다.
그것은,sizeof(char)모든 구현에 대해 항상 1이지만,CHAR_BIT거시적으로 보다limits.h는 플랫폼의 바이트 크기를 정의하며 항상 8비트인 것은 아닙니다.16비트 및 32비트 바이트를 가진 플랫폼이 있으므로char더 많은 비트를 사용하지만 여전히 바이트입니다.필요한 범위 이후char최소 -127에서 127(또는 0에서 255)입니다. 모든 플랫폼에서 최소 8비트입니다.
ISO/IEC 9899:TC3
6.5.3.4 작업자의 크기
- ...
- 연산자의 크기는 연산자의 크기(바이트 단위)를 산출합니다. 연산자는 식 또는 형식의 괄호가 붙은 이름일 수 있습니다. [...]
- 유형이 있는 피연산자에 적용할 경우
char,unsigned char, 아니면signed char, (또는 그것의 fi된 버전) 결과는 1. [...]
강조해주세요.
바이트(8비트를 의미하는 경우)는 항상 부호 없는 문자로 나타낼 수 있습니다.항상 최소 8비트 이상의 크기로, 모든 비트가 값을 구성하므로 항상 8비트 값이 들어맞습니다.
정확히 8비트를 원한다면 플랫폼에 의존하는 방식을 사용해야 할 것 같습니다.posix 시스템은 int8_t를 지원하기 위해 필요한 것 같습니다.이는 POSIX 시스템에서 char(따라서 바이트)는 항상 8비트임을 의미합니다.
(char) == 1의 ANSI C89/ISO C90 크기에서.그러나 1바이트가 8비트인 것은 아닙니다.1바이트의 비트 수를 세고자 한다면(limits.h에 액세스할 수 없습니다), 다음을 제안합니다.
unsigned int bitnum(void) {
unsigned char c = ~0u; /* Thank you Jonathan. */
unsigned int v;
for(v = 0u; c; ++v)
c &= c - 1u;
return(v);
}
여기서는 커니건의 방법을 사용하여 c에 설정된 비트 수를 계산합니다.위의 코드를 더 잘 이해하기 위해서(또는 다른 사람들이 좋아하는 것을 보기 위해서), 저는 "비트 트위들링 핵스"를 참조합니다.
C99 전에?플랫폼 의존 코드.
그런데 왜 신경을 쓰십니까?그냥 stdint.h로.
CI의 모든 구현에서 (기존 유닉스부터 하드웨어 엔지니어가 작성한 임베디드 컴파일러, 빅벤더 컴파일러까지) 사용했습니다.char항상 8비트였습니다.
꽤 신뢰할 수 있는 매크로와 부스트에서 디프를 입력할 수 있습니다.
일부 응답자들이 바이트라는 단어를 8비트가 아닌 다른 의미로 재정의한 것을 확인했습니다.바이트는 8비트이지만 일부 c 구현에서 char는 16비트(2바이트) 또는 8비트(1바이트)입니다.바이트를 '가장 작은 주소 지정 가능한 메모리 단위' 또는 그러한 쓰레기라고 부르는 사람들은 바이트(8비트)의 의미에 대한 이해를 잃었습니다.C의 일부 구현은 16비트 문자(2바이트), 일부는 8비트 문자(1바이트)로 '바이트'라는 표준형이 없는 것은 게으름 때문입니다.
그래서 int_8로.
언급URL : https://stackoverflow.com/questions/437470/type-to-use-to-represent-a-byte-in-ansi-c89-90-c
'programing' 카테고리의 다른 글
| Oracle 11g에서 JSON 지원 (0) | 2023.11.06 |
|---|---|
| 다른 함수에 void(*) 포인터 사용 (0) | 2023.11.06 |
| C에서 곱슬곱슬한 교정기의 이상한 사용 (0) | 2023.11.06 |
| 안드로이드에서 타원 크기란 무엇을 의미합니까? (0) | 2023.11.06 |
| 저장 프로시저를 작성할 때 'definer'가 필요합니까? (0) | 2023.11.06 |