繁体   English   中英

C 中是否有“unsigned long long int”的类型定义?

[英]Is there a typedef for "unsigned long long int" in C?

我想使用方法strtoull(...)但我真的必须在每次使用它时都输入unsigned long long吗?

我能找到的最大 integer typedef 是uint64_t / size_t但它与unsigned long long不同。

我相信unsigned long long会占用很多空间。 社区中是否有某种官方和公认的捷径? 我必须自己制作类型吗? 什么是它的好名字? u128int_t还是uLLong

您说您“需要unsigned long long int的类型”,但unsigned long long int一种类型。

显然,您担心的是名称unsigned long long int太长而无法输入。 您说得有道理,但是为它定义别名可能会造成比其价值更多的混乱。 每个懂行的C程序员都知道unsigned long long int是什么意思。 如果不查找别名,没有人知道它的含义,即便如此,他们也无法确定别名的含义不会随着软件的发展而改变。 如果要使用unsigned long long int ,最好使用unsigned long long int (或unsigned long long )。

您可以定义自己的typedef 请记住typedef不定义新类型。 它只为现有类型定义一个新名称。

<stdint.h>中定义的uint64_t可能是也可能不是unsigned long long int的别名,具体取决于实现。 unsigned long long int保证至少为 64 位,但它可能更宽(尽管我知道没有不完全是 64 位宽的实现)。 同样, uintmax_t可能是unsigned long long int ,但这也不能保证。

如果你愿意,你可以定义一个别名,但我不会推荐它,除非你需要一个恰好被定义为unsigned long long int的类型的名称。 如果您可以为您的 typedef 起一个在您的应用程序中有意义的名称,那可能是个好主意。 如果它的唯一含义是“ unsigned long long的较短名称,我建议不要这样做。

如果需要64位无符号integer类型, uint64_t已经存在; 就用那个。 (如果实现没有提供具有所需特征的类型,那么它就不会定义uint64_t并且当您尝试使用它时错误消息会告诉您这一点。)

我必须自己制作类型吗?

您可以为任何类型定义任何您想要的名称(当然在定义的命名规则内),请记住,这只是原始类型的别名,将预定义类型隐藏在typedef后面是typedef的,但它是合法的。

u128int_t 还是 uLLong?

考虑到上面的段落, uLLong非常好。 到今天为止,C 中没有原始的 128 位宽类型, u128int_t会产生误导,我会避免使用它。

uint64_t保证有 64 位, unsigned long long int不是,它必须至少有64 位,但任何规则都不能保证它应该只有64 位。

一些编译器(例如 gcc)支持 128 位整数作为扩展

例子:

__int128_t mul(__int128_t x, __int128_t y)
{
    return x * y;
    
}

https://godbolt.org/z/c8bW1xYdh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM