6

ビット単位の演算子のみを使用して加算 (または算術演算) を実行する方法はありますか?

4

3 に答える 3

4

算術演算子のハードウェア設計を検索できます。加算の例として、全加算器、半加算器、リップルキャリー加算器、キャリー保存加算器、キャリー先読み加算器があります。次に、ビット単位の演算子を使用してこれらの算術演算を実行するコードを大量に生成できます。

于 2012-11-08T06:18:50.027 に答える
3

ビットa、b、c の追加

carry_out = b&c|a&b|a&c;  // there's a carry, if at least 2 bits are set
sum = a^b^c;              // the sum is the number of set bits modulo 2

ワード内のすべてのビットに対してこれを実行する必要があります。最初に、carry_in = c = 0 を使用してビット 0 を実行し、carry_in(next_bit) = Carry_out(previous_result) まで繰り返します。

(ab)からbをビット反転し、最初のキャリーを 1 に設定すると、減算が行われます。

ただし、たとえば 32 個の数値を並列に追加する必要がある場合は、これらすべての数値の 32 個の lsbs を 'a' に当てはめ、バイナリ演算を並列に実行できます。これはビットスライスと呼ばれる技術です。

乗算CSAの場合(キャリーセーブアダーは間違いなく最良のソフトウェアアプローチです-最小の「面積」を持っています)

演習として、a+b(+c) を並列に計算するアルゴリズムを次に示します。

int a = 13113;
int b = 43334;
int c =     1;

int main()
{
   int sum=a^b^c,c2;
   c=((c&a)|(a&b)|(c&b))<<1;
   while (c) {
     c2=(c&sum)<<1;
     sum^=c;
    c=c2;
   }
   printf("%d\n",sum);
}
于 2012-11-08T06:24:17.053 に答える
0

bitwise演算子 inはnot on にCのみ適用されることに注意してくださいintegral operandsarithmetic operands

bitwiseはい、すべての操作に使用できます(+,-,*,/,%)

例えば

int a =10;
a<<1; // it's multiplication : a*2
a>>1; //it's division : a/2

私はこれ2だけを示しました。FULL ADDER (SUM and CARRY functios)任意の数のビットに対して を使用して、2 つの整数の加算を行うことができます。

于 2012-11-08T06:31:48.893 に答える