sizeof (char)! = 1 또는 최소한 CHAR_BIT> 8 인 기계가 있습니까?
기계 (또는 컴파일러)가 sizeof(char) != 1
있습니까?
합니까 C99 표준은 말한다 sizeof(char)
표준 준수 구현에 정확히 1을해야합니까? 그렇다면 섹션 번호와 인용문을 알려주십시오.
업데이트 : 바이트를 처리 할 수없는 (최소 읽기 4 바이트, 정렬 됨) 시스템 (CPU)이 있지만 4 바이트 ( uint32_t
)
만이
시스템의 컴파일러 sizeof(char)
에서 4로 정의 할
수 있습니까?
sizeof(char)
1이지만 char은 32 비트 ( CHAR_BIT
매크로)
Update2 : 하지만 sizeof 결과는 바이트가 아닙니다! CHAR의 크기입니다. 그리고 char는 2 바이트 또는 7 비트 일 수 있습니다.
Update3 : 좋습니다. 모든 기계에는 sizeof(char) == 1
. 그러나 어떤 기계가 CHAR_BIT > 8
있습니까?
항상 C99, 섹션 6.5.3.4에서 하나입니다.
유형이 char, unsigned char 또는 signed char 인 피연산자 (또는 정규화 된 버전)에 적용하면 결과는 1입니다.
편집 : 질문의 일부가 아니라 Harbison and Steele, 3rd ed. (c99 이전) p. 148 :
저장 단위는 한 문자가 차지하는 저장 용량으로 간주됩니다.
char
따라서 유형의 개체 크기는 1입니다.
편집 : 업데이트 된 질문에 대한 답변으로 Harbison과 Steele의 다음 질문과 답변이 적절합니다 (ibid, Ex. 4 of Ch. 6).
유형
char
이 -2,147,483,648에서 2,147,483,647까지의 값을 나타낼 수 있는 C 구현을 가질 수 있습니까? 그렇다면sizeof(char)
그 구현 아래에 무엇이 있을까요? 유형의 최소 및 최대 범위는int
무엇입니까?
답변 (ibid, p. 382) :
구현시 32 비트를 사용하여 type을 나타내는 것이 허용됩니다 (낭비되는 경우)
char
. 구현에 관계없이의 값sizeof(char)
은 항상 1입니다.
이것은 바이트가 8 비트이고 그 char
중 4 바이트 인 경우 (실제로 c99 정의에서는 불가능합니다. 아래 참조) 는 구체적으로 다루지 않지만 , 그 사실은 sizeof(char) = 1
항상 c99 표준과 Harbison 및 Steele에서 분명합니다.
편집 : 사실 (이 당신의 UPD이 질문에 대한 응답이다), 지금까지의 C99에 관한 한 sizeof(char)
것입니다 다시 섹션 6.5.3.4에서 바이트 :
sizeof 연산자는 피연산자의 크기 (바이트)를 산출합니다.
따라서 위의 인용문과 결합하면 8 비트의 바이트와 char
4 바이트의 바이트는 불가능합니다. c99의 경우 바이트는 char
.
7 비트 가능성에 대한 귀하의 언급에 대한 답변 char
: 이것은 c99에서는 불가능합니다. 표준의 섹션 5.2.4.2.1에 따르면 최소값 은 8입니다.
구현 정의 값 은 동일한 부호를 사용하여 표시된 값과 같 거나 더 커야 합니다.
— 비트 필드 (바이트)가 아닌 가장 작은 객체의 비트 수
**CHAR_BIT 8**
— signed char 유형의 객체에 대한 최소값
**SCHAR_MIN -127//−(27−1)**
— signed char 유형의 객체에 대한 최대 값
**SCHAR_MAX +127//27−1**
— unsigned char 유형의 객체에 대한 최대 값
**UCHAR_MAX 255//28−1**
— char 유형의 객체에 대한 최소값
**CHAR_MIN** see below
— char 유형의 객체에 대한 최대 값
**CHAR_MAX** see below
[...]
char 형 객체의 값이 표현식에서 사용될 때 부호있는 정수로 취급된다면 CHAR_MIN의 값은 SCHAR_MIN의 값과 같아야하고 CHAR_MAX의 값은 SCHAR_MAX의 값과 같아야한다. 그렇지 않으면 CHAR_MIN의 값은 0이고 CHAR_MAX의 값은 UCHAR_MAX의 값과 동일합니다. UCHAR_MAX 값은 2 ^ CHAR_BIT − 1과 같아야합니다.
sizeof(char)
4 인 기계는 없습니다 . 항상 1 바이트입니다. 이 바이트에는 32 비트가 포함될 수 있지만 C 컴파일러에 관한 한 1 바이트입니다. 자세한 내용은 실제로 C ++ FAQ 26.6을 참조하겠습니다 . 이 링크는 잘 다루고 있으며 C ++이 C에서 모든 규칙을 얻었음을 확신 합니다. 8 비트보다 큰 문자에 대해서는 comp.lang.c FAQ 8.10 을 참조 할 수도 있습니다 .
Upd2 :하지만 sizeof 결과는 바이트가 아닙니다! CHAR의 크기입니다. 그리고 char는 2 바이트 또는 7 비트 일 수 있습니다.
예, 바이트입니다. 다시 말하겠습니다. sizeof(char)
C 컴파일러에 따르면 1 바이트입니다. 사람들이 구어체로 바이트 (8 비트)라고 부르는 것이 C 컴파일러가 바이트라고 부르는 것과 반드시 같지는 않습니다. C 바이트의 비트 수는 시스템 아키텍처에 따라 다릅니다. 또한 최소 8 개가 보장됩니다.
PDP-10
과 PDP-11
이있었습니다.
업데이트 :
PDP-10 용 C99 컴파일러는 없습니다.
아나 로그 디바이스, 32 비트 SHARC DSP의 일부 모델은 CHAR_BIT = 32가 있고, TMS32F28xx에서 TI의 DSP는 CHAR_BIT = 16이 보도 .
업데이트 : CHAR_BIT = 9 인 PDP-10 용 GCC 3.2 가 있습니다 (해당 아카이브에서 include / limits.h 확인).
'programing tip' 카테고리의 다른 글
Ruby 클래스 이름을 밑줄로 구분 된 기호로 어떻게 변환합니까? (0) | 2020.09.07 |
---|---|
SpringData 저장소는 실제로 어떻게 구현됩니까? (0) | 2020.09.06 |
Ruby on Rails 3를 사용하여 모듈을 만들고 사용하는 방법은 무엇입니까? (0) | 2020.09.06 |
다중 처리를 위해 공유 메모리에서 numpy 배열 사용 (0) | 2020.09.06 |
JVM의 JIT 컴파일러가 벡터화 된 부동 소수점 명령어를 사용하는 코드를 생성합니까? (0) | 2020.09.06 |