C에서 짧고 int이며 오래 발명 된 이유는 무엇입니까? – 그들은 어떤 크기의 수는 너무

인식하지 못했습니다 정확한을 만드는 목적으로 무엇인가 short, int그리고 longC의 데이터 유형은?

나는 그 크기가 묶여있는 것처럼, 그것은하지 않는 것입니다 물어 이유 – 그들은 어떤 크기의 수는 너무 오래 같은 short보다 작은 int예를 들어,.

있는 상황은, 다음, 당신은을 사용한다 unsigned int또는 unsigned long대신에, 예를 들어, size_t바이너리 호환성을 제공하므로 희망을 수행하지 않을 때?

(크기를 모른다면 언제 선택할 것인지 어떻게 알 수 있습니까?)



답변

사용중인 아키텍처에 의해 정의됩니다. Zilog z80 칩 (공통 임베디드 칩)에서는 한 가지 크기이지만 x86 칩셋에서는 완전히 다른 크기 일 수 있습니다. 그러나 크기 자체는 서로 고정 된 비율입니다. 본질적으로 short와 long은 타입이 아니지만 int 타입에 적합합니다. 짧은 int는 (정규) int보다 1 배 작고 long int는 10 배 더 높습니다. 따라서 Int가 4 바이트로 바인딩되어 있다고 가정하면 짧은 한정자는 4 바이트로 묶고 2 바이트도 매우 일반적이며 긴 한정자는 4 바이트로 줄어들 수 있지만 잠재적으로 8 바이트로 향상시킵니다. 32 비트 시스템에서는 int 당 4 바이트로 최대 길이를 초과하여 일반 int와 동일하게 길게 만들 수 있습니다. 따라서 Short ≤ Int ≤ Long입니다.

그러나 다시 길게하면 int를 다음 셀로 푸시하여 8 바이트의 저장 공간을 제공 할 수 있습니다. 이것은 64 비트 기계의 단어 크기이므로 그러한 것들에 대해 걱정할 필요가 없으며 긴 ints에 대해 하나의 셀을 사용하여 표준 ints보다 다른 순서가되도록하지만 long long ints는 실제로 비트가됩니다.

어느 쪽을 선택해야하는지에 따라 Java 프로그래머가 걱정할 필요가없는 것으로 요약됩니다. “아키텍처는 무엇입니까?” 그것은 모두 해당 기계의 메모리의 워드 크기에 달려 있기 때문에 어떤 것을 사용할 것인지 결정하기 전에 그 메모리를 먼저 이해해야합니다. 그런 다음 메모리의 모든 비트 사용 여부에 관계없이 해당 메모리가 할당되므로 가능한 한 많은 메모리를 절약하기 위해 가장 작은 크기를 선택하십시오. 따라서 할 수있을 때 할 수있는 곳을 저장하고 할 수 없을 때 반바지를 골라 내고 할 수 없을 때 더 큰 무언가가 필요한 경우 상한선에 도달 할 때까지 필요에 따라 길어집니다. 그런 다음 많은 수의 루틴을 제공하거나 라이브러리에서 가져와야합니다.

C는 “휴대용 어셈블리”일 수도 있지만 여전히 하드웨어를 알아야합니다.


답변

오늘날 “바이트”는 “8 비트”를 의미하지만 항상 그런 것은 아닙니다. 머신은 4 비트, 8 비트, 12 비트, 16 비트, 32 비트 및 36 비트 (및 다른 크기도 가능)의 주소 지정 가능 청크를 사용했습니다. C의 디자인 의도 중 하나는 메모리 크기와 구성이 다른 머신에서 사용할 수 있어야했습니다.

디자인 의도는 원래 다양한 유형 int의 다양한 크기를 처리 할 수있는 가장 작은 것 외에 int+/- 32767을 처리 할 수있는 가장 실용적인 “일반용”크기 인 것입니다. 나는 컴퓨터가 너무 강력 해져서 64 비트 숫자에 대한 연산이 작은 것에 대한 연산과 같은 비용이 들었을 때 여전히 사용되는 언어를 만들고자하는 의도 나 의도가 없다고 생각합니다.

C의 정수형 시맨틱의 가장 큰 문제는 어떤 문맥에서는 그것들이 기수 또는 수학 정수를 나타내는 반면, 다른 문맥에서는 정수의 합동적인 모드 2 ^ n의 래핑 추상 대수 고리의 멤버를 나타내는 데 사용된다는 것입니다. 0에서 표현할 수있는 최대 값은 1을 산출하도록 정의되지만, 동작은 컴퓨터 워드 크기가 약 16 비트 (36 비트 워드 크기가 클 때)에 컴파일러가 수행 한 작업에 따라 더 많이 지정됩니다. ), 64 비트 시스템에서 의미가있는 것이 아니라 결과적으로, 작은 부호없는 32 비트 값에서 32 비트 부호없는 값을 뺀 결과는 큰 32 비트 부호없는 값이거나 음의 64 비트 수일 수 있습니다.


답변

/programming/589575/size-of-int-long-etc

따라서 가장 일반적으로 사용되는 아키텍처에서 char은 1 바이트이고 short 및 int는 2 바이트 이상이며 long은 4 바이트 이상입니다.

그리고 ‘int’는 현재 CPU에 대해 가장 자연스럽고 정상적이며 효율적인 표현이어야합니다.

따라서 일반적인 규칙은 값이 +/- 32K를 초과하지 않는 한 ‘int’를 사용하는 것입니다 (이전 CPU에서는 ‘long’사용). … 또는 작은 (<32K) 값으로 큰 배열을 만들지 않는 한 메모리가 문제가되므로 메모리를 절약하기 위해 ‘short’를 사용하십시오 (또는 ‘char’또는 ‘byte’).


답변

C는 다른 수준에서 메모리를 적극적으로 처리하도록 설계되었습니다. 메모리 제약, 아키텍처 등으로 인해 short, int 및 long과 float 및 double의 차이가 중요한 경우가 있습니다. 지금은 중요하지 않지만 여전히 포함 된 환경 (예 : 임베디드 및 데이터가 방대한 경우), 주로 32 비트 아키텍처에서 64 비트로 전환하면 문제가 다시 발생합니다. (128 비트 아키텍처로 전환하고 C / C ++가 여전히 인기있는 10 년 또는 20 년 안에 다시 문제가 될 것입니다). 이진 호환성이 문제가 되었더라도이 변수 유형 크기를 사용하지 않는 것이 좋습니다.

크기를 모르는 경우 어떤 아키텍처를 사용해야하는지에 대해 물었지만 주어진 아키텍처 / 컴파일러 조합의 크기를 알고 있으며 해당 수준에서 메모리를 최적화해야하는 경우 더 잘 알고 있어야합니다. 크기를 알 수 없기 때문에 단순히 여러 플랫폼에서 최적화 할 수 없으므로 해당 기능을 사용하지 않을 것입니다. 그러나 C로 작성된 많은 것들이 플랫폼에 따라 다르며, “크로스 플랫폼”방식에도 불구하고 유리한 최적화가 가능합니다.


답변