size of(char) != 1 또는 CHAR_B 이상의 시스템이 있습니까?IT > 8?
컴퓨터(또는 컴파일러)가 있습니까?sizeof(char) != 1?
C99 표준에는 다음과 같이 기재되어 있습니까?sizeof(char)표준 컴플라이언스 구현은 정확히 1이어야 합니다.만약 그렇다면, 섹션 번호와 견적서를 주세요.
업데이트: 바이트 주소를 지정할 수 없는 머신(CPU)이 있는 경우(최소 판독치는 4바이트, 정렬 완료).uint32_t ),
이 머신의 컴파일러는 sizeof(char) 4까지요? sizeof(char) 1이 됩니다만, char는 32비트(CHAR_BIT매크로)
업데이트 2:그러나 결과의 크기는 바이트가 아닙니다! 그것은 CHAR의 크기입니다.char는 2바이트 또는 7비트입니다.
업데이트 3:좋아요. 모든 기계는sizeof(char) == 1하지만 기계에는 어떤 것이 있는가?CHAR_BIT > 8?
항상 C99 섹션 6.5.3.4에 있습니다.
유형이 있는 오퍼랜드에 적용되는 경우
char,unsigned char, 또는signed char(또는 그 정규판) 결과는 다음과 같습니다.1.
편집: 질문의 일부가 아니라 Harbison과 Steel's의 관심을 끌기 위한 질문입니다. C: 참고 매뉴얼, 제3판, 프렌티스 홀, 1991년(c99년 이전) 페이지 148:
저장 단위는 한 문자가 차지하는 저장 용량으로 간주됩니다. 유형 객체의 크기입니다.
char그렇기 때문에1.
편집: 업데이트된 질문에 대한 답변으로 Harbison 및 Steel의 다음 질문과 답변이 관련이 있습니다(ibid, 6장 4절).
C의 실장은 어떤 타입으로 할 수 있습니까?
char는 -2,194,483,648 ~2,194,483,647 범위의 값을 나타낼 수 있습니다.그렇다면, 무엇이 될까요?sizeof(char)어떻게 할 수 있을까요?타입의 가장 작은 범위와 가장 큰 범위는 무엇입니까?int?
답변 (ibid, 페이지 382) :
실장에서는 32비트를 사용하여 타입을 나타낼 수 있습니다(낭비하는 경우).
char도입에 관계없이, 델의 가치입니다.sizeof(char)는 항상 1 입니다.
이는 특별히 바이트가 8비트이고,char이러한 바이트의 4개(c99 정의에서는 실제로 불가능, 아래 참조)입니다.sizeof(char) = 1항상 c99 표준과 하비슨, 스틸에서 제외됩니다.
편집: 사실(이것은 갱신 2의 질문에 대한 응답입니다), c99에 관한 한sizeof(char) 섹션 6.5.3.4의 바이트 단위입니다.
그
sizeof연산자는 피연산자의 크기(바이트 단위)를 나타냅니다.
따라서 위의 견적과 조합하여 8비트의 바이트와char이러한 바이트 중 4개는 불가능하기 때문에: c99의 경우 바이트는 a와 같습니다.char.
7비트 가능성을 언급하신 것에 대한 답변으로char: 이것은 c99에서는 불가능합니다.표준의 섹션 5.2.4.2.1에 따라 최소값은 8:
구현 정의 값은 표시된 값과 동일하거나 그 이상의 크기여야 하며, 같은 부호를 사용해야 합니다.
: 비트필드(바이트)가 아닌 최소 객체의 비트 수
CHAR_BIT 8: 유형 객체의 최소값
signed char
SCHAR_MIN -127: 유형 객체의 최대값
signed char
SCHAR_MAX +127: 유형 객체의 최대값
unsigned char
UCHAR_MAX 255: 유형 객체의 최소값
char
CHAR_MIN이하를 참조해 주세요: 유형 객체의 최대값
char
CHAR_MAX이하를 참조해 주세요[...]
유형 객체의 값이
char할 경우 이은 부호 있는 정수입니다.CHAR_MIN해야SCHAR_MIN""의 값"CHAR_MAX해야SCHAR_MAX이외의 「」의은,CHAR_MIN이 되어야 한다0""의 값"CHAR_MAX해야UCHAR_MAX값. »UCHAR_MAX2 - 1이어야CHAR_BIT 한다.
따위는 없다.sizeof(char)4입니다. 항상 1바이트입니다.이 바이트는 32비트를 포함할 수 있지만 C 컴파일러에 관한 한 1바이트입니다.자세한 내용은 C++ FAQ 26.6을 참조하십시오.이 링크로 커버가 잘 되어 있기 때문에, C++는 C로부터 모든 룰을 취득한 것이 확실합니다.8비트보다 큰 문자에 대해서는 comp.lang.c FAQ 8.10 을 참조해 주세요.
Upd2: 그러나 결과의 크기는 바이트가 아닙니다! 이것은 CHAR의 크기입니다.char는 2바이트 또는 7비트입니다.
아, 아, 아, 아, 아, 아, 맞다.시시하다 sizeof(char)C 컴파일러에 따르면 1바이트입니다.사람들이 일반적으로 바이트(8비트)라고 부르는 것은 C 컴파일러가 바이트라고 부르는 것과 반드시 같지는 않습니다.C 바이트의 비트 수는 기계 아키텍처에 따라 달라집니다.8시 정각
PDP-10
및 PDP-11 그랬다.
업데이트:
PDP-10용 C99 컴파일러는 없습니다.
아날로그 디바이스 32비트 SHARC DSP의 일부 모델에는 CHAR_B가 있습니다.IT=32 및 TMS32F28xx의 Texas Instruments DSP에 CHAR_B가 있습니다.IT=16이라고 합니다.
업데이트: CHAR_B를 사용하는 PDP-10용 GCC 3.2가 있습니다.IT=9(해당 아카이브에서 include/contract.h 확인).
「바이트」라고 하는 것은, 「옥텟」이라고 하는 것이 좋습니다.C에서 "bytes"와 "chars"는 정확히 같은 것을 의미합니다. 즉, 메모리의 최소 단위입니다.
언급URL : https://stackoverflow.com/questions/2215445/are-there-machines-where-sizeofchar-1-or-at-least-char-bit-8
'programing' 카테고리의 다른 글
| 모든 테스트 도메인에서 작동하도록 Vue/Webpack에서 핫 새로고침을 구성하는 방법 (0) | 2022.07.31 |
|---|---|
| C로 시간(NULL)은 무엇입니까? (0) | 2022.07.31 |
| Linux 상의 다른 프로세스와 파일 기술자를 공유할 수 있습니까?아니면 로컬 프로세스입니까? (0) | 2022.07.31 |
| tcmalloc/jemalloc와 메모리 풀의 차이점(및 선택해야 하는 이유)은 무엇입니까? (0) | 2022.07.31 |
| Vue.js 디버깅메시지 문제 (0) | 2022.07.31 |