有没有办法使用 ONLY 按位运算符执行加法(或算术运算)?
答案 0 :(得分:4)
您可以搜索算术运算符的某些硬件设计。另外举例来说,你可以找到全加器,半加器,然后是波纹进位加法器,进位保存加法器,带前瞻加法器。然后,您可以生成大量代码,以使用逐位运算符来执行这些算术运算。
答案 1 :(得分: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)。
从(a-b)位反转 b 并将初始进位设置为1时发生减法。
但是,如果必须并行添加32个数字,则可以使用所有这些数字的32个lsbs来匹配“a”并并行执行二进制运算。这是一种称为位切片的技术。
对于乘法CSA(进位保存加法器绝对是最好的软件方法 - 它具有最小的“区域”)
作为练习,这是一个并行计算+ 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);
}
答案 2 :(得分:0)
请注意bitwise
中的C
运算符仅适用于integral operands
而不适用于arithmetic 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)
为任意位数添加两个整数