为了账号安全,请及时绑定邮箱和手机立即绑定

签名与无符号整数

签名与无符号整数

我是否正确地说有符号和无符号整数之间的区别是:无符号可以保持较大的正值,而不是负值。无符号使用前导位作为值的一部分,而带符号版本使用最左侧位来标识数字是正数还是负数。有符号整数可以包含正数和负数。还有其他差异吗?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

无符号可以保持较大的正值,而不是负值。

是。

无符号使用前导位作为值的一部分,而带符号版本使用最左侧位来标识数字是正数还是负数。

表示有符号整数的方法有很多种。最容易想象的是使用最左边的位作为标志(符号和幅度),但更常见的是两个补码。两者都在大多数现代微处理器中使用 - 浮点使用符号和幅度,而整数运算使用二进制补码。

有符号整数可以包含正数和负数。


查看完整回答
反对 回复 2019-09-18
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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

首先,X86具有原生的支持二进制补码符号数的表示。您可以使用其他表示形式,但这需要更多指令,通常会浪费处理器时间。

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

首先,二进制补码数具有加法和减法与无符号数相同的特性。数字是正数还是负数没有区别。(所以你只需要继续,ADD并且SUB不用担心你的数字。)

在进行比较时,差异开始显现。x86有一种区分它们的简单方法:上/下表示无符号比较,大于/小于表示已签名比较。(例如,JAE“如果大于或等于跳跃”并且是未签名的。)

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

最后:如果你想检查溢出,你会对签名和无符号数做不同的处理。


查看完整回答
反对 回复 2019-09-18
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

他只询问签名和未签名。不知道为什么人们会在这里添加额外的东西。让我告诉你答案。

  1. 无符号:它仅包含非负值,即0到255。

  2. 签名:它包含负值和正值,但格式不同

    • 0到+127

    • -1到-128

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


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 585 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信