23

gcc 是否支持 amd64 上的 128 位 int?

如何定义它?

如何使用 scanf/printf 读/写它?

4

2 回答 2

23

GCC支持内置__int128unsigned __int128类型(仅在 64 位平台上),但看起来对 128 位整数的格式化支持在 libc 中不太常见。

注意:在 gcc4.6 之前的版本中<stdint.h>定义__int128_t和。__uint128_t另请参阅gcc 中是否有 128 位整数?对于 gcc/clang/ICC 版本表。

如何知道是否定义了 __uint128_t用于检测__int128

于 2010-07-25T14:49:46.917 回答
15
void f(__int128* res, __int128* op1, __int128* op2)
{
    *res = *op1 + *op2;
}

保存到 test.c 并编译:

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

你得到:

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

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

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

正如您所看到的,__int128通过保持两个 64 位的顺序来支持该类型,然后使用使用两条指令的典型大 int 模式对它们进行操作,例如 ADD,然后是 ADC(带进位相加)

于 2013-12-01T07:04:17.780 回答