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

时间:2017-03-05 02:05:22

标签: binary unsigned signed

我一直在阅读一些网站,但没有一个对我有意义。有符号和无符号二进制符号与有符号和无符号变量相同。如果你能提供帮助,我会很高兴的。)

4 个答案:

答案 0 :(得分:8)

"签署"指标表示该项目可以保持正值或负值。 "无符号"没有区分正面和负面的价值观。有符号/无符号变量可以引用任何数值数据类型(例如二进制,整数,浮点数等)。每种数据类型可能进一步定义为有符号或无符号。

例如,一个8位有符号二进制数可以保存0-127的值,包括正数和负数(1位用于符号,7位用于值),而8位无符号二进制数可以保存值从0到255(没有任何区别是否应该将该值视为正面或负面,尽管通常认为它是正面的。)

签名二进制文件是签名变量的特定数据类型。

希望有所帮助!

答案 1 :(得分:1)

“signed”变量意味着该值使用它的最高位(左边的最后一位)保持正值或负值,这就是我们所说的“有符号位”。 “无符号”变量不会,但最重要的位是2的下一个幂。

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

例如,最大值如下所示:
无符号字符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表示它是十六进制)

答案 2 :(得分:0)

有符号和无符号二进制是指依赖于所表示的二进制符号的转换。而对于变量,它指的是变量能否存储负值。

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

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

例如:1001 在有符号位(MSB是符号位): - 1

对于变量,很可能存储负数。

MSB:最重要的位

答案 3 :(得分:0)

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

  • 带有func lbu(加载字节无信号),它仅允许加载无信号二进制文件:lb rt,offset(rs)。

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