首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有符号整数与无符号整数

有符号整数与无符号整数
EN

Stack Overflow用户
提问于 2008-10-30 02:28:18
回答 15查看 389.5K关注 0票数 421

有符号整数和无符号整数之间的区别是:

无符号整数可以包含更大的正值,并且无负整数使用前导比特作为值的一部分,而有符号版本使用最左侧的比特来标识数字是否为正,或者negative.

  • Signed value.

  • Unsigned是否可以同时包含正数和负数。

还有其他区别吗?

EN

回答 15

Stack Overflow用户

发布于 2008-10-29 18:31:37

Unsigned可以包含更大的正值和无负值。

是。

Unsigned使用前导比特作为值的一部分,而有符号版本使用最左边的比特来标识数字是正数还是负数。

有符号整数有不同的表示方法。最容易可视化的是使用最左边的位作为标志(sign and magnitude),但更常见的是two's complement。这两种算法都在大多数现代微处理器中使用-浮点运算使用符号和幅度,而整数运算使用二的补码。

有符号整数既可以容纳正数,也可以容纳负数。

是。

票数 370
EN

Stack Overflow用户

发布于 2008-11-19 08:12:54

我将在x86上讨论硬件级别的差异。除非您正在编写编译器或使用汇编语言,否则这几乎是无关紧要的。但很高兴知道这个。

首先,x86对有符号数字的two's complement表示具有本机支持。您可以使用其他表示法,但这将需要更多指令,并且通常会浪费处理器时间。

我所说的“本机支持”是什么意思?基本上,我的意思是,有一组指令用于无符号数,另一组指令用于有符号数。无符号数字可以与有符号数字位于相同的寄存器中,实际上,您可以混合有符号和无符号指令,而无需担心处理器。这取决于编译器(或汇编程序员)来跟踪数字是否有符号,并使用适当的指令。

首先,二的补数具有加法和减法与无符号数相同的性质。数字是正数还是负数没有区别。(因此,您只需继续对您的数字进行ADDSUB操作,无需担心。)

当涉及到比较时,差异开始显现出来。x86有一种简单的方法来区分它们:上方/下方表示无符号比较,大于/小于表示有符号比较。(例如,JAE的意思是“如果大于或等于则跳转”,并且是无符号的。)

还有两组乘法和除法指令来处理有符号整数和无符号整数。

最后:如果你想检查,比如说,溢出,你应该对有符号和无符号的数字做不同的处理。

票数 96
EN

Stack Overflow用户

发布于 2014-05-15 15:07:23

他只问了有没有签名。不知道为什么人们要在这里面添加额外的东西。让我来告诉你答案。

  1. Unsigned:仅包含非负值,即0到255。
  2. Signed:包含负值和正值,但格式不同,如

代码语言:javascript
复制
- 0 to +127
- -1 to -128

这个解释是关于8位数字系统的。

票数 76
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/247873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档