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

What is the difference between signed and unsigned binary

我已经阅读了一些网站,但其中 none 对我来说很有意义。有符号和无符号二进制它们与有符号和无符号变量相同。如果你能帮上忙,我会很高兴:)

Signed and Unsigned Binary 是指依赖于所表示的二进制符号的转换。而对于变量,它指的是变量是否能够存储负值。

在二进制中有符号位:我们说 1 是负数,0 是正数。所以如果你看到第二个例子,第一位是 1 意味着什么? - 对,它是负面的。我们不将它包含在从 base2 到 base10 的转换中。

例如:1001 在无符号位中(不关心符号):9

例如:1001 In Signed bit(MSB为符号位):-1

对于变量来说,很可能存储的是负数。

MSB:最高有效位

"signed" 指示符表示该项目可以包含正值或负值。 "Unsigned" 不区分正值和负值。 signed/unsigned 变量可以引用任何数值数据类型(例如二进制、整数、浮点数等)。每种数据类型都可以进一步定义为有符号或无符号。

例如,一个 8 位有符号二进制可以保存 0-127 的值,包括正值和负值(1 位用于符号,7 位用于值),而 8 位无符号二进制可以保持 0-255 之间的值(尽管通常假定为正值,但不区分该值是正值还是负值)。

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

希望对您有所帮助!

一个"signed"变量意味着该值使用它的最高有效位(左边的最后一位)保持正值或负值,这就是我们所说的"signed bit"。 "unsigned" 变量没有,但最高有效位只是 2 的下一个幂。

我们将 1 的有符号位称为负数,而对于无符号数,该位将符合常规二进制位规则。

例如最大值如下所示:
Unsigned Char 0b11111111(十六进制的 0xFF)= 十进制的 255,(128+64+32+16+8+4+2+1 = 255)
有符号字符 0b11111111(十六进制为 0xFF)= 十进制为 -127,(-1 * (64+32+16+8+4+2+1) = - 127)

此外,您可能会在代码中看到:
无符号字符 0b10000001(十六进制的 0x81)= 十进制的 129,(128 + 1 = 129)
有符号字符 0b10000001(十六进制的 0x81)= 十进制的 -1,(-1 * 1)

(注:char是一个字节,表示二进制有八位可以改变)
(对于任何想知道的人,0b 表示该位是二进制的,0x 表示它是十六进制的)

这取决于职位或情况。例如,在汇编中,我们想从内存中加载字节值:0xFF(二进制~11111111)。 $s3 有这个值的地址。

  • with func lbu(load byte unsignal),它只允许加载无信号二进制:lb rt, offset(rs)。

    • lbu $s0, 32($s3) :lbu 将加载值并 0-extend 到 32 位 0x000000FF,它被解释为 255.
  • 使用 func addi,它允许加载二进制信号:lb rt,offset(rs)。
    • lb $s0, 32($s3) : lb 将加载值并且 1-extend 到 32 位 0xFFFFFFFF 被解释为 -1.