-1(整数)如何用大端,32位二进制补码字节表示?

时间:2012-03-16 15:07:56

标签: 32-bit twos-complement

很抱歉这个愚蠢的问题,但我在通过网络发送-1时遇到了一些麻烦。

如果1是......

00000000 00000000 00000000 00000001

.....应该-1不是....

11111111 11111111 11111111 11111111

.....我正在发送( 255 255 255 255 ),但获取小数值....

-1010842689

....在另一边。我错误地认为相同的8位规则适用于32位或其他什么?

感谢您的帮助。

修改

事实证明,输出格式为UTF-8,不允许值255为第一个字节,因此输出其他内容(错误代码?)。

2 个答案:

答案 0 :(得分:1)

-1以2s补码表示为全1位。

我在Java中验证了这一点。 Java使用32位2s补码整数。

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.toHexString(-1));
        System.out.println(Integer.toHexString(-1010842689));
    }
}

输出:

ffffffff
c3bfc3bf

答案 1 :(得分:0)

您获得的十进制值等于0xFFFFFFFFC3BFC3BF,即64位值。如果您只发送32位并且您正在读取sizeof(int)字节,其中sizeof(int)实际上是8而不是4,那么您可能会看到与此类似的内容。