質問

cでGMPを使用して、10進数の大きな整数「MPZ_T N」がありますが、どうすれば2つの部分にカットできますか?実際、これらの2つの部分はバイナリで同じ長さを持つ必要があります。

たとえば、nを112ビットのバイナリに変換することができるかもしれませんが、2つの56ビット部品にカットしたいと思います。

ありがとう

役に立ちましたか?

解決

temp = mpz_sizeinbase(n、2)を使用して元の数字のビット数を取得し、mpz_tdiv_q_2exp(q、n、temp >> 1)およびmpz_tdiv_r_2exp(r、n、temp >> 1)を使用して使用します。元の番号の上下の半分。

奇妙なビットの長さをどのように処理するかに応じて、TEMP >> 1の計算を調整する必要がある場合があります。

Hth、casevh

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top