在GNU/Linux中表示64位整数
Representing a 64 bit integer in GNU/Linux
我正在使用Ubuntu 10.10(64位)和gcc
,我想在我的c++程序中使用64位整数。
在我的系统中,sizeof(long)
, sizeof(long long int)
和sizeof(int64_t)
的输出都是8字节(64位)。
您建议使用哪个限定符(long
、long long
或int64_t
)来使用64位整数?
int64_t
——这是因为它是最便携的表示。另外两个可以在其他机器上以不同的方式表示。
int64_t。如果需要64位,则显式声明。long和long的大小因机器而异。
你需要64位还是至少64位?
使用int64_t
, int_least64_t
或int_fast64_t
中最清楚地表达您的意图的任何一个。(在当前的系统中,这三种类型几乎肯定是相同的,但是记录您的意图是有价值的。)
所有实现必须提供int_least64_t
和int_fast64_t
。至少从理论上讲,int64_t
可能不存在(例如,如果编译器有128位类型但没有64位类型,或者如果有符号整数不使用2补码表示)。
(但在我见过的每个类似c99的实现中,long long
正好是64位,并且int64_t
存在)
为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;
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 如何表示大于64位的二进制数量大小
- 移植将 32 位浮点数与使用 64 位进行比较的代码,此值表示什么
- 如何将64位地址的std::string表示转换为uint64_t
- 64位整数文本应该如何在C++中表示
- 在GNU/Linux中表示64位整数
- 32位,64位和80位浮点IEEE-754的可表示值范围