有符号整数和无符号整数之间的区别是:
无符号整数可以包含更大的正值,并且无负整数使用前导比特作为值的一部分,而有符号版本使用最左侧的比特来标识数字是否为正,或者negative.
还有其他区别吗?
发布于 2008-10-29 18:31:37
Unsigned可以包含更大的正值和无负值。
是。
Unsigned使用前导比特作为值的一部分,而有符号版本使用最左边的比特来标识数字是正数还是负数。
有符号整数有不同的表示方法。最容易可视化的是使用最左边的位作为标志(sign and magnitude),但更常见的是two's complement。这两种算法都在大多数现代微处理器中使用-浮点运算使用符号和幅度,而整数运算使用二的补码。
有符号整数既可以容纳正数,也可以容纳负数。
是。
发布于 2008-11-19 08:12:54
我将在x86上讨论硬件级别的差异。除非您正在编写编译器或使用汇编语言,否则这几乎是无关紧要的。但很高兴知道这个。
首先,x86对有符号数字的two's complement表示具有本机支持。您可以使用其他表示法,但这将需要更多指令,并且通常会浪费处理器时间。
我所说的“本机支持”是什么意思?基本上,我的意思是,有一组指令用于无符号数,另一组指令用于有符号数。无符号数字可以与有符号数字位于相同的寄存器中,实际上,您可以混合有符号和无符号指令,而无需担心处理器。这取决于编译器(或汇编程序员)来跟踪数字是否有符号,并使用适当的指令。
首先,二的补数具有加法和减法与无符号数相同的性质。数字是正数还是负数没有区别。(因此,您只需继续对您的数字进行ADD
和SUB
操作,无需担心。)
当涉及到比较时,差异开始显现出来。x86有一种简单的方法来区分它们:上方/下方表示无符号比较,大于/小于表示有符号比较。(例如,JAE
的意思是“如果大于或等于则跳转”,并且是无符号的。)
还有两组乘法和除法指令来处理有符号整数和无符号整数。
最后:如果你想检查,比如说,溢出,你应该对有符号和无符号的数字做不同的处理。
发布于 2014-05-15 15:07:23
他只问了有没有签名。不知道为什么人们要在这里面添加额外的东西。让我来告诉你答案。
- 0 to +127
- -1 to -128
这个解释是关于8位数字系统的。
https://stackoverflow.com/questions/247873
复制相似问题