我已经阅读了很多文章和 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/