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