naoya_t@hatenablog

いわゆるチラシノウラであります

GCCのビルトイン関数メモ

http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html より

関数名末尾に l が付いてるのは long、ll なら long long、無印は unsigned int。
他にもいろいろあるけど、コンテストで使うかもしれないやつだけとりあえず。

__builtin_popcount, __builtin_popcountl, __builtin_popcountll

立ってるビット数を数えて返す
0x11 (2進で10001) なら2
0x57 (2進で1010111) なら5

__builtin_parity, __builtin_parityl, __builtin_parityll

立ってるビット数の偶奇を返す。(popcount % 2 に相当)
0x11 (2進で10001) なら0(偶数)
0x57 (2進で1010111) なら1(奇数)

__builtin_ffs, __builtin_ffsl, __builtin_ffsll

2進で表した場合に小さい方から何桁目に初めて1が現れるか。
0x07 (2進で111) なら1。0x08 (2進で1000) なら 4。
0の場合は0を返す。

__builtin_clz, __builtin_clzl, __builtin_clzll

2進で表した場合に左側にいくつ0を埋める必要があるか (the number of leading 0-bits in x)
(32bit unsigned intの場合)0x07 (2進で111) なら29。
0の場合は未定義。

__builtin_ctz, __builtin_ctzl, __builtin_ctzll

2進で表した場合に、1の位からいくつ0が連なっているか (the number of trailing 0-bits in x)
0x08 (2進で1000) なら3。
0の場合は未定義。