为什么C ++有签名和未签名

时间:2013-01-25 22:52:12

标签: c++

我正在学习C ++专业从事JavaScript专业多年。我知道signedunsigned之间的差异,但我不确定我是否理解为什么它们甚至存在。是为了表演还是其他什么?

5 个答案:

答案 0 :(得分:5)

因为他们是需要的。

存在

signed种类型,因为有时候会想要使用负数。

存在

unsigned种类型,因为对于某些操作,e。 G。按位逻辑和移位,它们使用起来更清晰(例如,您不必担心符号位的表示方式等)。

答案 1 :(得分:5)

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

然后,两者的存在,以及隐含的转换会引发一系列不同的问题......

答案 2 :(得分:2)

它适用于需要描述明显不能为负的长度的低级别情况。文件大小例如。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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