wir*_*ark 1 c numbers bit-manipulation sum
我希望有人能够帮助我.
如果我有两个正数或正数和负数,我有以下算法.但是,如果两个数字均为负数,则不起作用.
有人可以解释我怎么可能?
void sum (int p, int q) {
int sum, carry;
carry = 1;
while (carry > 0) {
sum = p ^ q;
carry = p & q;
carry = carry << 1;
p = sum;
q = carry;
}
p = p << 1;
p = p >> 1;
printf("The result equals to %d", p);
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢大家:)
两个负数之和为负(除非发生溢出,如注释中所指出的).但是这段代码:
p = p << 1;
p = p >> 1;
Run Code Online (Sandbox Code Playgroud)
基本上是清除最顶部的位,即符号位,因此结果永远不会是负数.
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |