我已经阅读了很多文章和SO答案来理解2s complement
。他们给了我很多帮助。但是,对于2s complement
,我几乎没有怀疑。
1)2s complement
是一种存储负数的方法,以便简化操作或使用其他一些应用程序吗?
2)当计算机看到负数时会自动2s complement
?
3)取2s complement
是 - 编译器的工作还是处理器完成的工作?
4)在编译时,运行时或在为变量赋值时采用2s complement
?
我读过的文章(建议您更好地了解2s complement
):
答案 0 :(得分:3)
1)是的。
2)电脑无法看到"负数。它可以看到一大块二进制数据。你的应用程序拥有智能说法"这个二进制数据块是一个存储在2< compl"中的整数。但是,世界上几乎每个CPU都支持2的补码算法。
3)编译器看到int32_t x = 0;
等源代码,然后意识到该变量以二进制补码格式存储。然后,如果您添加x = x - 1
之类的代码,编译器会在生成程序时选择使用支持2的补码的处理器指令。处理器只执行程序告诉它要做的事情。它没有智慧。
4)如上所述,这是一个编译时决定。 (不确定你的意思"补充" ...)
答案 1 :(得分:2)
2s补充了存储负数的方式,以便于操作吗?
是的,它是存储签名号码的方式之一(负数和正数,而不仅仅是负数)
当计算机看到负数时,自动获取2s补充?
再次否定 - >签。取决于架构。可以选择1s,2s或其他一些表示。
2s补码是 - 编译器的工作还是由处理器完成或者什么?
编译器必须了解系统和处理器可能会或可能不会理解2s补充系统。
当在编译时,运行时或在为变量赋值时采用2s补码时?
可以在所有阶段(编译,运行)计算2s补码