Next: , Previous: , Up: Integer Functions   [Index]


5.11 ビット操作関数

ここで解説する関数群は,2の補数演算として利用できます(実際には符号付きで実装されていますが)。最小有効bitは0番目となります。

Function: void mpz_and (mpz_t rop, const mpz_t op1, const mpz_t op2)

op1op2のビット論理積をropに格納します。

Function: void mpz_ior (mpz_t rop, const mpz_t op1, const mpz_t op2)

ropop1op2のビット論理和を格納します。

Function: void mpz_xor (mpz_t rop, const mpz_t op1, const mpz_t op2)

op1op2のビット排他的論理和を格納します。

Function: void mpz_com (mpz_t rop, const mpz_t op)

opの1の補数をropに格納します。

Function: mp_bitcnt_t mpz_popcount (const mpz_t op)

op>=0の時にはopの2進表現における"1"ビットの数を返します。 op<0の時は,"1"の数は無限大となり,返り値はmp_bitcnt_tの最大値となります。

Function: mp_bitcnt_t mpz_hamdist (const mpz_t op1, const mpz_t op2)

op1op2 が共に>=0<0である時,この2数のハミング距離を返します。ハミング距離とは,op1op2の2進表現において異なるビット数のことです。片方が >=0 でもう片方が <0の時は,異なるビット数は無限大となり,返り値はmp_bitcnt_tの最大数となります。

Function: mp_bitcnt_t mpz_scan0 (const mpz_t op, mp_bitcnt_t starting_bit)
Function: mp_bitcnt_t mpz_scan1 (const mpz_t op, mp_bitcnt_t starting_bit)

opstarting_bitビット目から,有効ビット数の大きい方向に調べていき,最初の0,もしくは1が見つかったら終了します。返り値は発見したビット数の位置です。

starting_bitビット目における値が既に発見されたものである時には, starting_bit が返されます。

指定値のビットが見つからなかった時には mp_bitcnt_tの最大値が返されます。mpz_scan0関数の場合は負数の最後,mpz_scan1関数の場合は非負数の最後を過ぎたところでこれが発生します。

Function: void mpz_setbit (mpz_t rop, mp_bitcnt_t bit_index)

ropbit_indexビット目に1を代入します。

Function: void mpz_clrbit (mpz_t rop, mp_bitcnt_t bit_index)

ropbit_indexビット目に0を代入します。

Function: void mpz_combit (mpz_t rop, mp_bitcnt_t bit_index)

ropbit_indexビット目を反転します。

Function: int mpz_tstbit (const mpz_t op, mp_bitcnt_t bit_index)

opbit_indexビット目を調べてそのビット値(0もしくは1)を返します。