3

所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数。

以下代码无法编译:

foo(A) :-
   A0 is 0xdeadbeef,
   A1 is A0 >> 8,
   A2 is A0 >> 16,
   A3 is A0 >> 24.

然后我对以下两种典型情况感到困惑:

  1. 如何32bit在 GNU Prolog 中表示一个整数(如 0xdeadbeef)?并进一步推动它,如何表示一个 64 位整数?在 64 位 x86 Linux 上,long long输入 C 有 64 位。

  2. 使用 GNU Prolog 调用 C 时,手册中定义的接口有integer,positive和其他的.. 那么如果我想将一个32bit整数从 Prolog 传递给 C,我应该选择哪种类型..?我找到了一个临时解决方案并将其写在这个问题中,有没有更好的解决方案?

谁能给我一些帮助?

4

1 回答 1

3

GNU Prolog 使用有界整数,其边界取决于架构(32/64 位)。您可以通过(在 64 位上)了解这些限制:

| ?- current_prolog_flag(min_integer,X).

X = -1152921504606846976

yes
| ?- current_prolog_flag(max_integer,X).

X = 1152921504606846975

是的

存储更大整数的一种解决方法是将它们分成两部分,例如使用 Prolog 结构来记录它们。

于 2014-06-16T07:11:59.947 回答