尝试获取无符号long long最大值的位数时的奇怪行为

固定式

我喜欢奢侈。我想为您发明一种获取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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试将函数返回的无符号值分配给指向无符号的指针时继续获取 SIGSEGV

C程序如何显示可能的最大无符号long long值?

在Scala中的Some [Long]的ListBuffer中获取最大值

尝试读取9到13之间的无符号字符时,ifstream行为非常奇怪

控制无符号int的最大值

在C中定义long long变量时的奇怪行为

无符号字符数组转换为long long

如何为ioBuffer分配和检索无符号的Long值

从(String)获取(Long,String)=>尝试[(Long,String)]

如何打印大于无符号long long的std :: bitset的十进制值?

超过32位时不应用无符号long long int的按位运算

在RobotC中添加long时出现奇怪的行为

无符号long * double乘法中的怪异错误

C中无符号long和int的加法

通过指向无符号long long long的指针访问int会导致UB吗?

为什么 long 在查找三个整数的第二个最大值时显示错误的输出?

-1是否正确用作无符号整数的最大值?

无符号整数的快速无分支最大值

无符号字段更新为最大值

尝试选择最大值时如何正确分组?

compat_ioctl对于无符号long long数据类型无法正常工作

将无符号的long传递给使用long的函数是否不安全?

Java-将无符号的十六进制字符串解析为有符号的long

为什么我不能将有符号的int转换为无符号的long

我正在使用 `max()` 从 n 位数字中获取最大值?

如何根据小数位数获取整数的动态最大值

如何获取无符号字符的每一位的值?

搜索最大值时如何从集合中获取行号?

加入mysql表时获取最大值的最佳方法