使用按位运算符的算术运算符

有没有办法通过使用ONLY位运算符执行加法(或算术运算)?

添加 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(进位保存加法器绝对是最好的软件方法 – 它具有最小的“区域”)

作为练习,这是一个并行计算+ 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); } 

您可以搜索算术运算符的某些硬件设计。 另外举例来说,你可以找到全加器,半加器,然后是波纹进位加法器,进位保存加法器,带前瞻加法器。 然后,您可以生成大量代码以使用逐位运算符来执行这些算术运算。

请注意, C中的bitwise符仅适用于不在arithmetic operands integral operands上的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)为任意数量的位添加两个整数