gccはamd64で128ビットintをサポートしていますか?
それを定義する方法は?
scanf / printfを使用して読み取り/書き込みを行う方法は?
gccはamd64で128ビットintをサポートしていますか?
それを定義する方法は?
scanf / printfを使用して読み取り/書き込みを行う方法は?
GCCは組み込み__int128
とunsigned __int128
型(64ビットプラットフォームのみ)をサポートしていますが、128ビット整数のフォーマットサポートはlibcではあまり一般的ではないようです。
注:gcc4.6より前のバージョンで<stdint.h>
定義__int128_t
します。gccに128ビット整数はありますか?__uint128_t
も参照してください。gcc / clang/ICCバージョンのテーブル。
__uint128_tが検出用に定義されているかどうかを知る方法__int128
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
タイプは、2つの64ビットを順番に保持し、ADD、次にADC(キャリー付きで追加)などの2つの命令を使用する典型的なbigintパターンで操作することでサポートされます。