Как использовать длинное int в GNU Prolog?

В общем, кажется, что GNU Prolog использует 28-битное целое число на моем 32-битном x86 Linux.

Код ниже не может быть скомпилирован:

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 из Пролога в C, какой тип мне выбрать ...? Я нашел специальное решение и написал его в этом вопрос, есть ли лучшее решение?

Может ли кто-нибудь помочь мне?


person lllllllllllll    schedule 12.06.2014    source источник


Ответы (1)


GNU Prolog использует ограниченные целые числа, границы которых зависят от архитектуры (32/64 бита). Вы можете узнать эти ограничения с помощью (на 64 битах):

| ?- current_prolog_flag(min_integer,X).

X = -1152921504606846976

yes
| ?- current_prolog_flag(max_integer,X).

X = 1152921504606846975

да

Обходной путь для хранения больших целых чисел - разделить их на 2 части и, например, использовать структуру Prolog для их записи.

person didou    schedule 16.06.2014