【发布时间】:2021-11-23 22:14:23
【问题描述】:
我有一个简单的函数,它会找到一个无符号整数的二进制补码,然后测试它以确保它是正确的
unsigned twoscomplement(unsigned v) {
};
int main()
{
unsigned a = 255;
unsigned c = twoscomplement(a);
unsigned s = a+c;
printf("%u+%u=%u\n", a, c, s);
return 0;
}
当我问我将如何解决这个问题时,我得到了答案 unsigned c = (~a)+1; 根据我的理解 (~a) 翻转位然后 +1 用于溢出?对此问题的任何帮助将不胜感激
【问题讨论】:
-
为了得到一个补码,我们从一个补码开始(即)我们通过执行
~a来反转位。有了这个,为了得到两个的补码,我们给它加一个。那是基本的定义/操作。它是否溢出对于该机械操作来说并不是真正的问题。 可能是一个 signed 数字的问题,以及我们之后如何处理它,但它不是一个 unsigned 数字 -
请大家帮忙
标签: c binary integer unsigned twos-complement