Как -1 (целое число) представлено в старших байтовых байтах, 32-битных двоичных с дополнением? - PullRequest
1 голос
/ 16 марта 2012

Извините за глупый вопрос, но у меня возникли некоторые проблемы при отправке -1 по сети.

Если 1 равно ....

00000000 00000000 0000000000000001

..... не должно быть -1 ....

11111111 11111111 11111111 11111111

..... которую я отправляю ( 255 255 255 255 ), но получаю десятичное значение ....

-1010842689

....на другой стороне.Я ошибочно полагаю, что те же 8-битные правила применяются к 32-битным или что-то еще?

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ:

Оказываетсячто вывод был отформатирован в UTF-8, что не позволяет значению 255 быть первым байтом, поэтому выводил что-то еще (код ошибки?).

Ответы [ 2 ]

1 голос
/ 16 марта 2012

-1 представлен в дополнении 2s как все 1 бит.

Я подтвердил это на Java.В Java используются 32-битные целые числа дополнения 2 *.

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

Вывод:

ffffffff
c3bfc3bf
0 голосов
/ 16 марта 2012

Это десятичное значение, которое вы получаете, равно 0xFFFFFFFFC3BFC3BF, 64-битному значению.Если вы отправляете только 32-битные файлы и читаете sizeof (int) байтов, где sizeof (int) на самом деле 8 вместо 4, вы можете увидеть нечто похожее на это.

...