【发布时间】:2018-08-06 13:00:02
【问题描述】:
我想在 linux 内核(32 位处理器)上执行以下代码:
#define UQ64 long long int
#define UI32 long int
UQ64 qTimeStamp;
UQ64 qSeconds;
UI32 uTimeStampRes;
qTimeStamp = num1;
uTimeStampRes = num2;
// 64 division !
qSeconds = qTimeStamp / uTimeStampRes;
有计算64除法的算法吗? 谢谢。
【问题讨论】:
-
您发布的代码不起作用?
-
可以使用支持这种操作的机器上的编译器来划分任何位数。 32 位机器上的 gcc 符合 C 标准,这意味着它支持 64 位操作(使用 至少 64 位长的
long long int类型)。您可以在 8 位架构上划分 64 位数字,前提是您的编译器可以生成正确的代码。附带说明一下,gcc 作为扩展支持__int128类型(和操作) -
哎呀,我开始怀疑自己了,还是内核空间不同,我是wrong?
-
@KamilCuk 它只是尝试微优化代码而不使用库函数。没有别的了。
-
请注意,
long int在 64 位内核上将是 64 位。如果您真的想要内核中的 32 位整数,普通的int会更好。此外,对于 signed 类型,以U开头的类型名的命名约定令人困惑!
标签: c linux-kernel