在 GNU/Linux 中表示 64 位整数

发布于 2024-12-19 05:11:39 字数 303 浏览 2 评论 0原文

我正在使用带有 gcc 的 Ubuntu 10.10(64 位),并且我想在我的 C++ 程序中使用 64 位整数。

在我的系统上,sizeof(long)sizeof(long long int)sizeof(int64_t) 的输出都是 8 个字节(64 位) )。

对于使用 64 位整数,您建议使用哪种限定符(longlong longint64_t)?

I am using Ubuntu 10.10 (64 bit) with gcc and I wanted to use a 64 bit integer in my C++ program.

On my system the outputs of sizeof(long), sizeof(long long int) and sizeof(int64_t) are all 8 bytes (64 bits).

Which qualifier (long, long long, or int64_t) would you recommend for using 64 bit integers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

乖乖公主 2024-12-26 05:11:40

int64_t——这是因为它是最可移植的表示形式。另外两个可以在其他机器上以不同的方式表示。

int64_t -- This is because it is the most portable representation. The other two could be represented differently on other machines.

呆萌少年 2024-12-26 05:11:40

int64_t。如果您需要 64 位,请明确声明。长和长的尺寸因机器而异。

int64_t. If you need 64 bits, declare it explicitly. The size of long and long long varies by machine.

呆橘 2024-12-26 05:11:40

您需要正好 64 位还是至少 64 位?

使用 int64_tint_least64_tint_fast64_t 中最能清楚表达您意图的一个。 (几乎可以肯定,在当前系统上,这三种类型都是相同的类型,但记录您的意图很有价值。)

所有实现都必须提供 int_least64_tint_fast64_t。至少在理论上,int64_t 可能不存在(例如,如果编译器有 128 位类型但没有 64 位类型,或者有符号整数不使用 2 的补码表示)。

(但在我见过的每个 C99 风格的实现中,long long 恰好是 64 位,并且 int64_t 存在。)

Do you need exactly 64 bits or at least 64 bits?

Use whichever of int64_t, int_least64_t, or int_fast64_t most clearly expresses your intent. (All three are almost certain to be the same type on current systems, but documenting your intent is valuable.)

All implementations must provide int_least64_t and int_fast64_t. It's at least theoretically possible that int64_t might not exist (say, if the compiler has a 128-bit type but no 64-bit type, or if signed integers aren't represented using 2's-complement).

(But in every C99-ish implementation I've ever seen, long long is exactly 64 bits, and int64_t exists.)

少年亿悲伤 2024-12-26 05:11:40

为 64 位整数定义自定义类型并在代码中使用它。使用#ifdef指令让编译器可以选择正确的一个。统一一些整数的例子:

#ifdef (_MSC_VER)

#include <basetsd.h>

#define int8_t  INT8
#define uint8_t UINT8
#define int16_t  INT16
#define uint16_t UINT16
#define int32_t INT32
#define uint32_t UINT32
#define int64_t INT64
#define uint64_t UINT64

#else

#include <inttypes.h>

#endif

typedef uint8_t u8_t;
typedef  int8_t s8_t;
typedef uint16_t u16_t;
typedef  int16_t s16_t;
typedef uint32_t u32_t;
typedef  int32_t s32_t;
typedef uint64_t u64_t;
typedef  int64_t s64_t;

Define custom type for 64-bit integer and use it in your code. Use the directive #ifdef to the compiler can choose the right one. The example for unification some integers:

#ifdef (_MSC_VER)

#include <basetsd.h>

#define int8_t  INT8
#define uint8_t UINT8
#define int16_t  INT16
#define uint16_t UINT16
#define int32_t INT32
#define uint32_t UINT32
#define int64_t INT64
#define uint64_t UINT64

#else

#include <inttypes.h>

#endif

typedef uint8_t u8_t;
typedef  int8_t s8_t;
typedef uint16_t u16_t;
typedef  int16_t s16_t;
typedef uint32_t u32_t;
typedef  int32_t s32_t;
typedef uint64_t u64_t;
typedef  int64_t s64_t;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文