晚上好,如果我的英语不好,请提前抱歉,我是法国人。
因此,在 C 中,有不同的变量类型,例如 int、long、...根据类型需要多个字节,如果我没记错的话,“最大”类型是 long long int(或只是long long) 需要 8 个字节的内存(比如 long 很奇怪,所以如果有人能解释我也谢谢)
所以我的第一个问题是:我可以创建我的自定义变量类型,例如需要 16 个字节,或者如果数字对于 long long(或 unsigned long long)来说太高,我是否被迫使用字符串?
您可以创建各种自定义类型,如果您想要一个 16 字节宽的“整数”类型,您可以创建一个自定义结构并将两个long longs配对在一起。但是,您必须手动实现对这些类型的所有算术。这在过去很常见,当时 16 位(甚至 32 位)机器最常见,您可以使用“bigint”库来执行 64 位整数数学运算。现在大多数机器要么是 64 位的,要么long long在 32 位目标上有本机支持,所以这不太有用。
你曾经经常看到这样的库:
typedef struct _BigInt {
unsigned long long high;
unsigned long long low;
} BigInt;
// Arithmetic functions:
BigInt BigIntAdd(BigInt a, BigInt b);
// etc.
Run Code Online (Sandbox Code Playgroud)
由于当前典型的 CPU 寄存器宽度为 64 位,因此这些值已经逐渐消失,这允许范围很大的值,除非您使用非常专业的数据,否则在正常编程任务中需要外部值不再“常见”那个范围。由于@datenwolf 在下面的评论中明确且正确,如果您发现生产代码中需要此类功能,请为其寻找可靠且经过调试的库。(编写自己的代码可能是一项有趣的练习,但如果您尝试将其作为快速完成其他工作的快速步骤,这种事情可能会成为一个错误农场。)正如 Eric P 在上面的评论中指出的那样,clang 提供了一种无需第三方库即可执行此操作的本机方式。
(约的宽度怪异的歧义或换算公式long,并long long大多是历史的,如果你没有与它的混淆和不必要的实物平台演变。查看关于this--问题的意见C标准定义的最小尺寸整数类型,但并不是说它们必须彼此不同;从历史上看,类型char, short, int, longandlong long通常是区分 8、16、32 和 64 位大小的有用方法,但现在有点混乱,如果您想要特定大小的现代平台提供uint32_t保证大小而不是使用“经典”C 类型。)