gpt4 book ai didi

c - 尝试获取 unsigned long long 的最大位数时出现奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 20:38:24 25 4
gpt4 key购买 nike

我喜欢奢华。我想发明一种方法,让您获得 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];

它没有声明自 Action 用域变量、大小为 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

关于c - 尝试获取 unsigned long long 的最大位数时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29126023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com