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
long
sizeof(char)<=sizeof(short)<=sizeof(long)
short
char
long
uint16_t
uint32_t
short
int
long
short
int
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);
}
0 → +18446744073709551615
实际上,大多数现代处理器(ARM,Intel / AMD,Alpha,SPARC,Itanium和PowerPC)上的unsigned int范围为0到2 ^ 32-1,即4,294,967,295 = 0xffffffff
因为int(有符号和无符号)的长度为32位,最大的长度如前所述。
(无符号short的最大值为2 ^ 16-1 = 65,535)
(unsigned)long long int将具有64位的长度(在大多数情况下,long int就足够了
64位Linux等,但该标准承诺将long long int设置为64位)。
因此,它们的范围为0到2 ^ 64-1 = 18446744073709551615
2020-05-27
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
看一下limits.h。您可以找到编译器的特定值。 INT_MIN和INT_MAX将很有趣。
2020-05-27
limits.h
man limits.h
一个32位无符号int的范围是0到4,294,967,295。 0到65535将是16位无符号。
无符号long long(在64位实现中,也可能是ulong和uint)的范围(至少)为0到18,446,744,073,709,551,615(264-1)。从理论上讲,它可能会更大,但至少到目前为止,这种情况不存在。
2020-05-27
stdlib.h