我喜欢奢侈。我想为您发明一种获取unsigned long long int
最大位数的方法。所有这些都是自动的。这里是:
#include <limits.h>
#include <string.h>
#define STRINGIFY(x) #x
#define ULLONG_MAX_STRING STRINGIFY(ULLONG_MAX)
#define NUMERAL_MAXIMUM strlen(ULLONG_MAX_STRING)
如描述的那样工作吗?
现在,关于奇怪的行为几乎可以从上面回答这个问题。如果我这样声明一个变量(-std=c99
特定):
char variable [NUMERAL_MAXIMUM];
而不是声明自动作用域变量(大小为20的数组),它甚至在到达该行之前就终止了程序。尽管如果我不这样声明变量,则什么也不会终止,程序将继续工作。
到底是怎么回事?
更新:更奇怪的是,只有当我使用获得的长度作为数组的大小时,程序才会执行此操作。
IIUC,OQ希望以十进制打印最大值所需的大小。以下内容适用于8位至64位的大小,至少适用于CHAR_BIT==8
:
#include <stdio.h>
#include <limits.h>
#define ASCII_SIZE(s) ((3+(s) * CHAR_BIT) *4 / 13)
int main(void)
{
printf("unsigned char : %zu\n", ASCII_SIZE(sizeof(unsigned char)) );
printf("unsigned short int : %zu\n", ASCII_SIZE(sizeof(unsigned short int)) );
printf("unsigned int : %zu\n", ASCII_SIZE(sizeof(unsigned int)) );
printf("unsigned long : %zu\n", ASCII_SIZE(sizeof(unsigned long)) );
printf("unsigned long long : %zu\n", ASCII_SIZE(sizeof(unsigned long long)) );
printf(" Ding : %u\n", UINT_MAX );
printf(" Lang Ding : %lu\n", ULONG_MAX );
printf("Heel lang Ding : %llu\n", ULLONG_MAX );
return 0;
}
输出:
unsigned char : 3
unsigned short int : 5
unsigned int : 10
unsigned long : 20
unsigned long long : 20
Ding : 4294967295
Lang Ding : 18446744073709551615
Heel lang Ding : 18446744073709551615
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句