Frage

Unterstützt gcc 128-Bit-Int auf amd64?

Wie definiere ich es?

Wie benutze ich scanf / printf zum Lesen / Schreiben?

War es hilfreich?

Lösung

GCC unterstützt eingebaute __int128 und unsigned __int128 typen (nur auf 64-Bit-Plattformen), aber es sieht so aus, als ob die Formatierungsunterstützung für 128-Bit-Ganzzahlen in libc weniger verbreitet ist.

Beachten: <stdint.h> definieren __int128_t und __uint128_t auf Versionen vor gcc4.6.Siehe auch Gibt es eine 128-Bit-Ganzzahl in gcc? für eine Tabelle mit gcc / Clang / ICC-Versionen.

Wie kann man wissen, ob __uint128_t definiert ist zur Erkennung von __int128

Andere Tipps

void f(__int128* res, __int128* op1, __int128* op2)
{
    *res = *op1 + *op2;
}

Zum Testen speichern.c und kompilieren mit:

$ gcc -c -O3 test.c
$ objdump -d -M intel test.o

Sie erhalten:

mov    rcx, rdx
mov    rax, [rsi]
mov    rdx, [rsi+0x8]

add    rax, [rcx]
adc    rdx, [rcx+0x8]

mov    [rdi], rax
mov    [rdi+0x8], rdx

Wie Sie sehen können, die __int128 typ wird unterstützt, indem zwei 64-Bit-Sequenzen nacheinander gehalten und dann mit dem typischen Big int-Muster bearbeitet werden, bei dem zwei Befehle verwendet werden, z. B. ADD und dann ADC (add mit carry)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top