【发布时间】:2019-05-27 07:14:44
【问题描述】:
我面临的问题是:-
位运算符的逻辑在下面的代码中是如何工作的?
代码:
#include <stdio.h>
int subtract(int x, int y)
{
while (y != 0)
{
int borrow = (~x) & y;
x = x ^ y;
y = borrow << 1;
}
return x;
}
int main()
{
int x = 29, y = 13;
printf("\nx - y is %d", subtract(x, y));
return 0;
}
subtract(x,y) 函数是如何工作的?
【问题讨论】:
-
“调试”它使用笔和纸。在纸上写下所有的数字(作为位),并一个一个地做所有的操作(仍然使用位)。并将复杂的操作(例如
(~x) & y)拆分成最简单的部分(例如int temp = ~x; int borrow = temp & y;) -
简而言之:首先设置
borrow变量来识别进位位。然后,xor 进行(无进位)加法/减法,这在基数 2 中是相同的。然后,进位在步骤 3 中处理。我想知道这是否也适用于波纹进位
标签: c bitwise-operators subtraction