1

受信する関数をプログラムする必要があります

  • のような 2 進数10001、および
  • 実行すべきシフト数を示す 10 進数。

問題は、C++ operator を使用する<<と、ゼロが後ろからプッシュされますが、最初の数字が削除されないことです...たとえば

shifLeftAddingZeroes(10001,1)

100010それの代わりに戻ります00010が、私が欲しいものです。

私は自分自身を明確にしたことを願っています = P

4

2 に答える 2

0

あなたが望むのは、ビットシフトしてから、アクティブにできる出力ビットの数を制限することです(値1を保持します)。これを行う1つの方法は、必要なビット数のマスクを作成し、ビットシフトされた値とそのマスクのANDを作成することです。以下はそのためのコード サンプルです。int_type を使用する値の型に置き換えるか、テンプレート型にします。

int_type shiftLeftLimitingBitSize(int_type value, int numshift, int_type numbits=some_default) {
    int_type mask = 0;
    for (unsigned int bit=0; bit < numbits; bit++) {
        mask += 1 << bit;
    }
    return (value << numshift) & mask;
}

の出力は に10001,1なりますshiftLeftLimitingBitSize(0b10001, 1, 5) == 0b00010

numbits が整数型の長さと正確に一致しない限り、数値の「先頭」に常に余分な 0 ビットがあることに注意してください。

于 2013-03-29T01:52:53.960 に答える
0

その情報をintに保存していると思います。この数値には、実際には表示されているものよりも多くの先行ゼロがあることを考慮してください。したがって、数値はおそらく 16 ビット、つまり00000000 00000001. たぶん、シフト後に必要な数と同じ数の 1 を持つ数で AND 演算してみてください。(ビットごとの操作に固執したいと仮定します)。

于 2013-03-28T23:35:27.240 に答える