【发布时间】:2020-03-31 06:47:07
【问题描述】:
我想在 linux 内核中有一个固定大小的 64 位整数。
我的问题:
- 如果我使用
unsigned long,那么它在一种架构上可能是 64 位,而在另一种架构上可能是 32 位。对? - 固定的数据类型是什么 64 位整数?
我特指linux内核
【问题讨论】:
标签: c linux gcc linux-kernel
我想在 linux 内核中有一个固定大小的 64 位整数。
我的问题:
unsigned long,那么它在一种架构上可能是 64 位,而在另一种架构上可能是 32 位。对? 我特指linux内核
【问题讨论】:
标签: c linux gcc linux-kernel
如果我使用 unsigned long,那么它在一种架构上可能是 64 位,而在另一种架构上可能是 32 位。对?
是的,unsigned long 的大小是实现定义的,因此不可移植。
固定 64 位整数的数据类型是什么?
int64_t 或 uint64_t。
【讨论】:
u64、s64 或它们的 ABI 类似物 __u64 和 __s64。
C 语言提供了很多固定宽度的类型,有符号的和无符号的。
正如 Lundin 所说,“unsigned long 的大小是实现定义的,因此不可移植”。
因此,int、unsigned int 和 float 等常见类型取决于您的编译器。
您可以查看自 C99 以来可用的固定宽度整数类型的完整列表in this reference
int64_t 根据文档,“signed 整数类型,宽度正好为 64 位,没有填充位,负值使用 2 的补码”。
uint64_t,同样根据文档,“unsigned 整数类型,宽度正好为 64 位”
但还有更多其他固定的 64 位宽度整数类型,您可能会好奇,例如:uint_fast64_t、uint_least64_t
我推荐你看看reference,并在学习神奇的 C 类型时获得很多乐趣\o/
您也可以在GNU libc manual of integer types上查看可用类型
希望这会有所帮助!
【讨论】: