相关疑难解决方法(0)

不使用' - '运算符减去两个数字

我尝试使用以下代码,但我无法理解为什么它给了我错误的答案.我正在计算2的补码并加上另一个补.

#include <stdio.h>

int add(int a, int b) {
    while (a) {
        a = (a & b) << 1;
        b = a^b;
    }
    return b;
}

int sub(int a, int b) // add a with b's 2's complement.
{
    return (add(a, add(~b, 1)));
}

int main() {
    int a, b, res;
    a = 3, b = 1;
    res = sub(a, b);
    printf("%d\n", res);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

7
推荐指数
1
解决办法
3万
查看次数

编译器和负数表示

最近我对这个问题很困惑.也许是因为我没有阅读语言规范(这是我的错,我知道).

C99标准没有说明编译器应该使用哪个负数表示.我一直认为存储负数的唯一正确方法是两个补码(在大多数情况下).

所以这是我的问题:您是否知道任何现在的编译器默认实现一个补码或符号幅度表示?我们可以用一些编译器标志更改默认表示吗?

确定使用哪种表示的最简单方法是什么?

那么C++标准呢?

c c++ compiler-construction representation negative-number

5
推荐指数
1
解决办法
1765
查看次数

如何使用按位运算符表示否定,C

假设你有2个数字:

int x = 1;
int y = 2;
Run Code Online (Sandbox Code Playgroud)

使用按位运算符,我该如何表示x-y

c bit-manipulation operators

1
推荐指数
1
解决办法
3967
查看次数