我正在学习C ++专业从事JavaScript专业多年。我知道signed
和unsigned
之间的差异,但我不确定我是否理解为什么它们甚至存在。是为了表演还是其他什么?
答案 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 ++的时候,大多数程序员也都是硬件工程师。