2s补充了存储负数的方式吗?

时间:2015-01-30 10:31:22

标签: c++ c binary bit

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

2 个答案:

答案 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补码

相关问题