有没有办法只使用按位运算符来执行加法(或算术运算)?
问问题
4827 次
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 个数字,则可以将 'a' 与所有这些数字的 32 lsb 相匹配并并行执行二进制运算。这是一种称为位切片的技术。
对于乘法 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
运算符 inC
只适用于integral operands
not onarithmetic 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)
任意数量的位来添加两个整数
于 2012-11-08T06:31:48.893 回答