所以基本上看来 GNU Prolog 在我的 32 位 x86 Linux 上使用 28 位整数。
下面的代码无法编译:
foo(A) :-
A0 is 0xdeadbeef,
A1 is A0 >> 8,
A2 is A0 >> 16,
A3 is A0 >> 24.
然后我对以下两种典型情况感到困惑:
如何表示一个32bit
GNU Prolog 中的整数(如 0xdeadbeef)?更进一步,如何表示 64 位整数?在 64 位 x86 Linux 上,long long
C 中的类型是 64 位的。
当使用GNU Prolog调用C时,定义在manual http://www.gprolog.org/manual/html_node/gprolog068.html has integer
, positive
和其他人..那么如果我想通过32bit
从Prolog到C的整数,我应该选择哪种类型..?我找到了一个临时解决方案并将其写在此处question https://stackoverflow.com/questions/24132386/weird-situation-in-using-a-pointer-as-the-argument-for-a-c-call-prolog-process,还有什么更好的解决办法吗?
有人可以给我一些帮助吗?
GNU Prolog 使用有界整数,其界限取决于体系结构(32/64 位)。您可以通过以下方式了解这些限制(在 64 位上):
| ?- current_prolog_flag(min_integer,X).
X = -1152921504606846976
yes
| ?- current_prolog_flag(max_integer,X).
X = 1152921504606846975
yes
存储更大整数的解决方法是将它们分成两部分,例如使用 Prolog 结构来记录它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)