programing

C Int 및 Long 32 - 64비트 단위의 값 범위

skycolor 2023. 6. 16. 21:34
반응형

C Int 및 Long 32 - 64비트 단위의 값 범위

C에서 Int 변수의 값 범위와 혼동됩니다.

32비트 unsigned int의 범위는 0에서 65,535입니다.So long은 0에서 4,294,967,295를 가집니다.

이것은 32비트 기계에서 괜찮습니다.하지만 이제 64비트 기계에서는 모든 것이 동일하게 유지됩니까?아니면 제 능력이 다른 것일까요?

저는 이 질문들을 초보자로서 이해하지만, 저는 정말 혼란스럽습니다.이 메서드 서명도 도움이 되지 않습니다.:)

unsigned long long int atomicAdd(unsigned long long int* address, unsigned long long int val);

C 및 C++에서는 다음과 같은 최소 요구 사항이 있습니다(즉, 실제 구현은 더 큰 규모를 가질 수 있음).

signed char: -2^07+1 to +2^07-1
short:       -2^15+1 to +2^15-1
int:         -2^15+1 to +2^15-1
long:        -2^31+1 to +2^31-1
long long:   -2^63+1 to +2^63-1

특정 구현에서는 다양한 비트 범위가 있습니다.위키백과 기사는 이것을 멋지게 설명합니다.

아니요.intC에서 32비트로 정의되지 않았습니다. int그리고.long특정 크기로 정의되지 않았습니다.그 언어가 유일하게 보장하는 것은sizeof(char)<=sizeof(short)<=sizeof(long).

는 이적으컴만는수있다를 만들 수 있습니다.short,char,그리고.long모든 비트 수가 동일합니다.나는 그 모든 유형을 제외하고 실제로 그렇게일부를 알고 있습니다.char.

이것이 C가 다음과 같은 유형을 정의하는 이유입니다.uint16_t그리고.uint32_t특정 사이즈가 필요하시면 그 중 하나를 사용하셔야 합니다.

K&R에서 발췌한 내용:

short 종비 16트니다입입니다.long 및 32µ트 및int16비트 또는 32비트 중 하나입니다.각 컴파일러는 자신의 하드웨어에 적합한 크기를 자유롭게 선택할 수 있습니다.short모래땅int, s는 16비트 이상입니다.long이고 s는 32비트 이상입니다.short더 이상 다음 시간이 아닙니다.int은 더 이상 이아은닌상더아닌▁longer▁no.long.


▁of를 사용할 수 .limits.h를 포함합니다. " " " " " "/ " " 은 다음과 같습니다.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>


int main(int argc, char** argv) {

    printf("CHAR_BIT    :   %d\n", CHAR_BIT);
    printf("CHAR_MAX    :   %d\n", CHAR_MAX);
    printf("CHAR_MIN    :   %d\n", CHAR_MIN);
    printf("INT_MAX     :   %d\n", INT_MAX);
    printf("INT_MIN     :   %d\n", INT_MIN);
    printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
    printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
    printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
    printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
    printf("SHRT_MAX    :   %d\n", SHRT_MAX);
    printf("SHRT_MIN    :   %d\n", SHRT_MIN);
    printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
    printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
    printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
    printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);
    printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
    printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
    printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
    printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
    printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
    printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
    printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);

    return (EXIT_SUCCESS);
}

기계를 조금 조정해야 할 수도 있지만, (구현 정의) 최소값과 최대값에 대한 개념을 파악하기 시작하는 것이 좋습니다.

아무도 대답하지 않습니다.표준은 최소 범위를 정의합니다.int는 65535 이상을 유지할 수 있어야 합니다.그러나 대부분의 최신 컴파일러는 32비트 값을 허용합니다.또한 여러 유형이 동일한 용량(예: int 및 long)을 갖는 것을 방해하는 것은 없습니다.

그렇긴 하지만, 당신의 특정한 경우에 표준은 다음과 같이 말합니다.

0 → +18446744073709551615

부호 없는 롱 롱 인트의 범위로서.

추가 읽기: http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size

실제로 대부분의 최신 프로세서(ARM, Intel/AMD, Alpha, SPARC, Itanium, PowerPC)에서 서명되지 않은 int의 범위는 0 ~ 2^32 - 1이며, 이는 int(서명되지 않은 것과 서명되지 않은 것 모두)가 32비트이고 가장 큰 것이 아래와 같이 표시되므로 4,294,967,295 = 0xffff입니다.

(부호되지 않은 쇼트의 최대값은 2^16 - 1 = 65,535)

(부호가 없는) long long int는 64비트의 길이를 가질 것입니다 (long int는 대부분의 64비트 Linux 등에서 충분하지만 표준은 long long int에 대해 64비트를 약속합니다).따라서 이러한 값의 범위는 0 ~ 2^64 - 1 = 18446744073709551615입니다.

일부 변수의 C 및 C++ 메모리 요구 사항:

signed char: -2^07 to +2^07-1
short: -2^15 to +2^15-1
int: -2^15 to +2^15-1
long: -2^31 to +2^31-1
long long: -2^63 to +2^63-1

signed char: -2^07 to +2^07-1
short: -2^15 to +2^15-1
int: -2^31 to +2^31-1
long: -2^31 to +2^31-1
long long: -2^63 to +2^63-1

하드웨어의 컴파일러와 아키텍처에 의존합니다.

C 언어에 대한 국제 표준은 짧은 변수의 크기가 int 유형의 크기보다 작거나 같아야 하며, 이는 다시 길이 유형의 크기보다 작거나 같아야 합니다.

한계를 보세요.컴파일러의 특정 값을 찾을 수 있습니다.INT_MIN과 INT_MAX가 관심을 가질 것입니다.

다음을 살펴 보십시오.limits.h시스템에 있는 파일은 시스템의 특정 한계를 알려줍니다.또는 확인man limits.h"숫자 제한" 섹션으로 이동합니다.

32비트 부호 없는 int의 범위는 0 ~ 4,294,967,295.0 ~ 65535는 16비트 부호 없는 int입니다.

부호 없는 긴 길이(64비트 구현의 경우 울롱 및 unt도 가능)의 범위는 0 ~ 18,446,744,073,709,551,615(2-164)입니다.이론적으로는 그것보다 더 클 수도 있지만, 적어도 현재로서는 그것이 존재하지 않는 경우는 거의 없습니다.

포함하는 것이 좋습니다.stdlib.hstdlibg가 없으면 시간이 오래 걸립니다.

언급URL : https://stackoverflow.com/questions/6155784/range-of-values-in-c-int-and-long-32-64-bits

반응형