我已经阅读了很多文章和 SO 答案来理解 2s complement 。他们帮了我很多。但是,我对 2s complement 几乎没有怀疑。

1) 2s complement 是一种存储负数以简化操作的方法还是有其他一些应用程序?

2) 2s complement 当计算机看到负数时自动获取?

3) 2s complement 是——编译器的工作或由处理器完成还是什么?

4) 2s complement 是在编译时、运行时还是在为变量赋值时?

我读过的文章是 (应该建议更好地理解 2s complement):

What is “2's Complement”?

Why is two's complement used to represent negative numbers?

http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html

最佳答案

1) 是的。

2)计算机无法“看到”负数。它可以看到一大块二进制数据。您的应用程序拥有智能说“这块二进制数据是存储在 2 的 compl 中的整数”。但是,世界上几乎每个 CPU 都支持 2 的补码算法。

3)编译器看到int32_t x = 0;等源代码,然后意识到这个变量是以二进制补码格式存储的。如果随后添加类似 x = x - 1 的代码,编译器会在生成程序时选择使用支持 2 补码的处理器指令。处理器只做程序告诉它做的事情。它没有智能。

4) 如上所述,这是一个编译时决定。 (不太确定你所说的“补充”是什么意思......)

关于c++ - 2s 补码是一种存储负数的方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28233888/

10-11 04:42