1

多年来,我一直在通过专业地做 JavaScript 来学习 C++。我知道 和 之间的区别signedunsigned但我不确定我是否理解它们为什么存在。是为了表演还是什么?

4

5 回答 5

5

因为他们需要。

signed类型的存在是因为有时想要使用负数。

unsigned类型的存在是因为对于某些操作,例如按位逻辑和移位,它们使用起来更干净(例如,您不必担心符号位的表示方式等)

于 2013-01-25T22:55:06.233 回答
5

您可以争辩说,与等效的有符号类型相比,使用无符号值可以获得更大的正范围,但主要原因是它们允许在负数几乎没有意义或没有意义的域中映射概念。例如,容器的大小永远不能为负数。通过使用在类型中变得显式的无符号类型。

话又说回来,两者的存在以及隐式转换带来了一系列完全不同的问题......

于 2013-01-25T22:55:11.833 回答
2

对于需要描述显然不能为负数的长度的低级别情况,它会派上用场。例如文件大小。

于 2013-01-25T22:55:13.977 回答
0

它们的存在是因为要处理的数学可能不同。

考虑将两个 32 位值相乘以获得 64 位值。根据操作数的符号,有符号乘法和无符号乘法的高 32 位可能不同。开始组装,这就是 x86 上有 IMUL 和 MUL 指令的原因。

于 2013-01-25T23:02:01.860 回答
0

C 被设计为一种高级语言,但也能够轻松完成低级工作,例如使用 _ASM 关键字将汇编语言代码直接插入源代码。汇编语言直接与 CPU 寄存器一起工作,而算术指令则与有符号和无符号整数一起工作。变量类型可能是这样设计的,使得值可以在 CPU 寄存器和变量之间传输,而无需任何转换。从 C 扩展而来的 C++ 也继承了这个特性。毕竟,在 C/C++ 发明的那个时候,大部分程序员也是硬件工程师。

于 2013-01-26T01:06:54.610 回答