是 2s 补码存储负数的一种方式

Is 2s complement a way to store negative number?

本文关键字:一种 方式 补码 2s 存储      更新时间:2023-10-16

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

1)2s complement存储负数的方法是否使操作变得简单或也有其他应用程序?

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

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

4)当2s complement是在编译时,运行时还是在将值辅助到变量时

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

什么是"2的补语"?

为什么用二的补码来表示负数?

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) 如上所述,这是一个编译时决策。(不太确定你所说的"补体"是什么意思......

2s补码是一种存储负数以使操作变得容易的方法吗?

是的,这是存储有符号数字(负数和正数,而不仅仅是负数)的方法之一

当计算机看到负数时会自动取 2s 补码?

再次负 ->签名。取决于体系结构。可以选择 1、2 或其他一些表示形式。

取 2s 补码是 - 编译器的工作还是由处理器完成还是什么?

编译器必须理解系统和处理器可能理解也可能不理解2s补码系统。

当 2s 补码是在编译时、运行时还是在将值辅助到变量时?

可以在所有阶段(编译、运行)计算 2s 补码