Jos*_*lls 0 c integer long-long
我在Windows计算机上使用Codeblocks和GNU编译器.编译器运行时,它会在以下条件下运行:
mingw32-gcc.exe -Wall -g -std=c11 <filename> -o obj\Debug\main.o
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("INTEGER min: %d\n", INT_MIN);
printf("INTEGER max: %d\n\n", INT_MAX);
printf("UNSIGNED INTEGER max: %u\n\n", UINT_MAX);
printf("LONG INTEGER min: %ld\n", LONG_MIN);
printf("LONG INTEGER max: %ld\n\n", LONG_MAX);
//printf("LONG LONG INTEGER min: %lld\n", LONG_LONG_MIN);
//printf("LONG LONG INTEGER max: %lld\n\n", LONG_LONG_MAX);
printf("UNSIGNED LONG INTEGER max: %lu\n\n", ULONG_MAX);
//printf("UNSIGNED LONG LONG INTEGER max: %lld\n", ULONG_LONG_MAX);
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我输出的代码:
INTEGER min: -2147483648
INTEGER max: 2147483648
UNSIGNED INTEGER max: 4294967295
LONG INTEGER min: -2147483648
LONG INTEGER max: 2147483648
UNSIGNED LONG INTEGER max: 4294967295
Run Code Online (Sandbox Code Playgroud)
引用LONG LONG整数的行被注释掉了,因为编译器给出了错误:
error: 'LONG_LONG_MIN' undeclared (first use in this function)
error: 'LONG_LONG_MAX' undeclared (first use in this function)
error: 'ULONG_LONG_MAX' undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)
但是,在键入代码时,CodeBlocks提供了代码提示,表明我实际上可以使用LONG_LONG常量.因此,我需要回答以下问题:
谢谢
该常数LLONG_MAX,ULLONG_MAX等等。
至于为什么int和long int有相同的值,归咎于C标准:它没有为每种数据类型定义固定的位数,只定义了最小位数:
int 必须至少为 16 位long int 必须至少为 32 位long long int 必须至少为 64 位确切的位数因操作系统而异。
#include <stdio.h>
#include <limits.h>
int main()
{
printf("INTEGER min: %d\n", INT_MIN);
printf("INTEGER max: %d\n\n", INT_MAX);
printf("UNSIGNED INTEGER max: %u\n\n", UINT_MAX);
printf("LONG INTEGER min: %ld\n", LONG_MIN);
printf("LONG INTEGER max: %ld\n\n", LONG_MAX);
printf("LONG LONG INTEGER min: %lld\n", LLONG_MIN);
printf("LONG LONG INTEGER max: %lld\n\n", LLONG_MAX);
printf("UNSIGNED LONG INTEGER max: %lu\n\n", ULONG_MAX);
printf("UNSIGNED LONG LONG INTEGER max: %llu\n", ULLONG_MAX);
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的 64 位 Mac OS X 上,打印:
INTEGER min: -2147483648
INTEGER max: 2147483647
UNSIGNED INTEGER max: 4294967295
LONG INTEGER min: -9223372036854775808
LONG INTEGER max: 9223372036854775807
LONG LONG INTEGER min: -9223372036854775808
LONG LONG INTEGER max: 9223372036854775807
UNSIGNED LONG INTEGER max: 18446744073709551615
UNSIGNED LONG LONG INTEGER max: 18446744073709551615
Run Code Online (Sandbox Code Playgroud)
编辑:如果您想编写可移植代码并具有固定宽度的整数,请使用stdint.h:
#include <stdint.h>
printf("int64_t max : %lld\n\n", INT64_MAX); // 9223372036854775807
printf("uint64_t max: %llu\n\n", UINT64_MAX); // 18446744073709551615
Run Code Online (Sandbox Code Playgroud)