Crikey。 GMPや他の図書館では、固定幅のフィールドを「四肢」または番号の一部として指定します。これまでのところ、レジスタを追加する場合はキャリーフラグをadc
に設定するなど、レジスタと命令のサイズであるため、それぞれ32,64ビットプラットフォームでuint32_t
またはを使用する可能性が高いオーバーフローする。
とにかく、これらの手足は、その兆候ではなく、ビンガムの実際の大きさを表します。 2の補数を使用すると、どこかに符号ビットがあると予想されますが、数字をサイズ変更したい場合は乱雑になります(そして、adc
は署名について気にしません。それを覚えて、それを正しい場所に戻す...非常に遅い。
私はあなたが各手足のビットを反転させることを達成しようとしているかどうか分かりません。あなたはあなたがで終わるだろう
1011 0111 1010 1011 = 47019
(簡略化のために短い)、このような手足のセットを想像した場合:とにかく
0100 1000 0101 0100 = 18516
を、GMPは、手足の兆候を示すものではありません。 _mp_size
は、GMPは符号付きの数を表し方法です、あなたが見ることができるように
typedef struct
{
int _mp_alloc; /* Number of *limbs* allocated and pointed
to by the _mp_d field. */
int _mp_size; /* abs(_mp_size) is the number of limbs the
last field points to. If _mp_size is
negative this is a negative number. */
mp_limb_t *_mp_d; /* Pointer to the limbs. */
} __mpz_struct;
typedef __mpz_struct mpz_t[1];
:GMPにおける符号付き整数型には、この構造体によって定義されるmpz_t
です。コードで
(具体的には、mpz/aors.h
)あなたは、これが使用され表示されます:
usize = u->_mp_size;
vsize = VARIATION v->_mp_size;
// .....
if ((usize^vsize) < 0)
{
/* U and V have different sign. Need to compare them to determine
which operand to subtract from which. */
// does subtraction instead of add.
実際の操作は、あなたの符号なしの型である関数のmpn_
シリーズによって実行されています。
GMPには、サイズを正しく設定できるようにする基本的なタイプからいくつかのインポート/エクスポート機能があります。私はあなたが何をしようとしているのかよく分かっていませんが、彼らが不十分であると仮定して、あなた自身でそれを設定することができます。
あなたのコードは '〜mynumber [i]'式の結果を破棄しているので、実際には何もしません。 –
私は悪いが、問題は別のものです。 – Gianluca
近似で入力するのではなく、実際のコードをコピーして貼り付けるほうがよいでしょう。 –