有符号二进制和无符号二进制的区别是什么?

13

我已经阅读了一些网站,但它们都对我来说没有意义。签名和无符号二进制与有符号和无符号变量相同吗?如果您能帮忙解答,我会很高兴的 :)


有符号和无符号二进制是指转换取决于所表示的二进制数的符号。而对于变量来说,它指的是变量能否存储负值。 - Smit
但是有符号二进制和无符号二进制之间有什么区别呢? - R.M.R
我来晚了,但是想提醒一下:如果我看到“signed/unsigned binary”,我会想到签署二进制文件(例如exe/dll),而不是变量的数据类型。 - mcmlxxxvi
4个回答

17

"signed"指示符表示该项可以包含正值或负值。"unsigned"不区分正负值。签名/未签名变量可引用任何数值数据类型(例如二进制、整数、浮点等)。每种数据类型可能会进一步定义为已签名或未签名。

例如,一个8位带符号的二进制可以容纳从0-127的值,既包括正数也包括负数(1位用于符号,7位用于值),而一个8位无符号二进制可以容纳从0-255的值(没有区分值应被视为正数还是负数,尽管通常假定为正数)。

带符号二进制是带符号变量的特定数据类型。

希望有所帮助!


有符号数可以表示正数和负数。 - R.M.R
你能再解释一下无符号的概念吗?抱歉有点笨拙,我还没有完全理解它。 - R.M.R
1
无符号意味着在值中没有任何指示数字是被认为是正数还是负数的标志(标志=“-”或“+”)。通常,它被认为是一个正值。 - Joel Stanford
@R.M.R 是的,那是正确的。如果这是为了学校作业,我可能会省略“然而...”这个短语。只使用第一个陈述句,因为那是事实上正确的。 - Joel Stanford
是的!我终于明白了!非常感谢你的帮助,我会按那个小勾号的!我也希望将来能够帮助到你!:D好的,谢谢你最后的那一部分 :) - R.M.R
显示剩余6条评论

4
一个"signed"变量意味着它的值使用最高有效位(最左边的位),也就是我们称之为"signed bit"的位,来保存一个正或负的值。而"unsigned"变量则不使用最高有效位作为符号位,只是将其作为下一个二的幂次方的位。
我们称一个signed bit的值为1时表示负数;在unsigned变量中,该位按照常规的二进制比特规则处理。
例如,最大值如下:
Unsigned Char 0b11111111 (0xFF in hex) = 255 in decimal, (128+64+32+16+8+4+2+1 = 255)
Signed Char 0b11111111 (0xFF in hex) = -127 in decimal, (-1 * (64+32+16+8+4+2+1) = - 127)
此外,在代码中可能会看到以下内容:
Unsigned Char 0b10000001 (0x81 in hex) = 129 in decimal, (128 + 1 = 129)
Signed Char 0b10000001 (0x81 in hex) = -1 in decimal, (-1 * 1)
(注:char是一个字节,也就是有八个二进制位可以改变)
(对于任何想知道的人,0b表示该比特位为二进制,0x表示该比特位为十六进制)

3
签名和非签名二进制是指取决于二进制表示中的符号的转换。对于变量而言,它指的是变量是否能够存储负值。
在有符号位的二进制中,我们说 1 代表负数,0 代表正数。所以如果你看到第二个例子中的第一位是 1,那么它是什么意思呢?没错,它是负数。但在将其从二进制转换为十进制时,我们不包括这一位。
例如:1001 在无符号位(不关心符号)中:9
例如:1001 在有符号位(最高位为符号位)中:-1
对于变量而言,它很可能存储负数。
MSB:最高有效位

有符号二进制和无符号二进制有什么区别? - R.M.R
阅读答案,你应该知道它们的区别。 - Smit
1
很抱歉我有些困惑,但我仍然不明白。 - R.M.R
完成。您可能需要检查一下。 - Smit

1

这取决于位置或情况。例如,在汇编语言中,我们想要从内存中加载一个值为0xFF(二进制的11111111取反)的字节。$s3拥有此值的地址。

  • 使用函数lbu(载入无符号字节),它只允许载入无符号二进制数:lbu rt, offset(rs)。

    • lbu $s0, 32($s3):lbu将加载该值并进行零扩展到32位,即0x000000FF,这被解释为255。
  • 使用函数addi,它允许加载带符号二进制数:lb rt, offset(rs)。
    • lb $s0, 32($s3):lb将加载该值并进行符号扩展到32位,即0xFFFFFFFF,这被解释为-1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接