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
특정 구현에서는 다양한 비트 범위가 있습니다.위키백과 기사는 이것을 멋지게 설명합니다.
아니요.int
C에서 32비트로 정의되지 않았습니다. int
그리고.long
특정 크기로 정의되지 않았습니다.그 언어가 유일하게 보장하는 것은sizeof(char)<=sizeof(short)<=sizeof(long)
.
는 이적으컴만는수있다를 만들 수 있습니다.short
,char
,그리고.long
모든 비트 수가 동일합니다.나는 그 모든 유형을 제외하고 실제로 그렇게 한 일부를 알고 있습니다.char
.
이것이 C가 다음과 같은 유형을 정의하는 이유입니다.uint16_t
그리고.uint32_t
특정 사이즈가 필요하시면 그 중 하나를 사용하셔야 합니다.
K&R에서 발췌한 내용:
short
종비 16트니다입입니다.long
및 32µ트 및int
16비트 또는 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.h
stdlibg가 없으면 시간이 오래 걸립니다.
언급URL : https://stackoverflow.com/questions/6155784/range-of-values-in-c-int-and-long-32-64-bits
'programing' 카테고리의 다른 글
Scala에서 Excel 파일을 읽는 방법 (0) | 2023.06.16 |
---|---|
Oracle TNS: net 서비스 이름이 잘못 지정되었습니다. (0) | 2023.06.16 |
세션 상태 손실 (0) | 2023.06.11 |
기본 라인 색상 주기 가져오기 (0) | 2023.06.11 |
새 줄 없이 C를 삽입합니다. (0) | 2023.06.11 |