如何使用#define使用64位

问题描述 投票:2回答:4

假设我有以下内容:

#define MAX (16 * 1024 * 1024 * 1024)
#define MIN (1 * 1024 * 1024 * 1024)

这将使MAX =0。我认为这是因为定义仅使用32位进行定义。有没有一种方法可以使用64位,或者我需要重新编写代码以使定义可以处理较小的值?

c
4个回答
6
投票

这将使MAX = 0

否,这将在预处理阶段将MAX替换为文字标记( 16 * 1024 * 1024 * 1024 )

我认为这是因为定义仅将32位用于定义

[define不使用any位,它只是文本替换。

是否有办法为此使用64位

显式地使用类型可能比使用整数立即数后缀更好,因为它更确切地表明您获得了多少位:

#define MAX ((uint64_t)16 * 1024 * 1024 * 1024)

#define MAX (16ll * 1024 * 1024 * 1024)

3
投票

发生这种情况的原因是所有这些常量都隐式为int类型。就您而言,这似乎是32位类型。如果这是您想要的行为,则需要确保您使用的是64位类型。

您可以强制转换以确保它是64位类型:

#define MAX ((int64_t)16 * 1024 * 1024 * 1024)

或者只是自己扩展数学:

#define MAX 17179869184

3
投票

宏本身对位不敏感,但使用它的代码可能对位敏感。如果要确保始终将常量MAX视为long long,则可以将其定义为“17179869184‬LL”或“ 17179869184i64”(仅MSVC)。

更好:

const long long int MAX = 17179869184‬LL;


0
投票

我希望

#define MAX (16LL * 1024LL * 1024LL * 1024LL)
© www.soinside.com 2019 - 2024. All rights reserved.