对于硬件问题,我需要将有符号十进制数 (255) 转换为 8 位二进制补码。
我的问题是我不确定如何用 8 位制作像 255 这样的正数,因为我相信范围是 -128 到 127,对吗?
如果 01111111 是 127,那么我怎样才能用 8 位将 255 转换为二进制。
我想我只是不明白“签名”是指十进制数还是指二进制数。
对于硬件问题,我需要将有符号十进制数 (255) 转换为 8 位二进制补码。
我的问题是我不确定如何用 8 位制作像 255 这样的正数,因为我相信范围是 -128 到 127,对吗?
如果 01111111 是 127,那么我怎样才能用 8 位将 255 转换为二进制。
我想我只是不明白“签名”是指十进制数还是指二进制数。
有符号值 255 必须 - 至少 - 以 9 位表示。
0...11111111 = +225
给定一个 8 位表示,你是对的,我们最多只能表示 +127/-128。
如果我们将有符号的 255 转换为 8 位字段,我们将失去第一位的语义含义,只剩下11111111
表示 -1(尽管可能是 -0,具体取决于我们的实现)。
尝试取该值的二进制补码将产生:
11111111
00000000 (flip bits)
00000001 (add one)
= 1 (integer value)
就像我在评论中所说的那样,在我看来,这就像一个问题,我会被要求询问我对那个有符号位的理解,并且它消耗了一些数字表示,你似乎已经想通了。
我绝对不是这类事情的专家,但你确定你的问题是正确的吗?
当然签名仅指二进制数?
在 8bit 中代表字节,它是无符号的,并且覆盖的范围是从 0 到 255,所以 255 十进制应该是 8bit 中的 11111111
有符号表示如果您必须覆盖从 -255 到 255 的范围,也允许负数,您可以将负数放在一个字节中,将正数放在另一个字节中