Почему [1111 1111] представляет как -1, а не 255 в целых числах? - PullRequest
1 голос
/ 29 апреля 2019

Я делаю замену знака числа в соответствии с правилом: инвертировать бит за битом и добавляю 1, но я работаю с целочисленным типом данных, а не sbyte. Как компилятор понимает, что я меняю знак,

enter image description here

и не возвращает значение 255?

        int operand1 = 0, operand2 = 0;
        int result;

        operand1 = 0x01;                            // [0000 0001]
        result = ~operand1;                         // [1111 1110]
        result++;                                   // [1111 1111]

        Console.WriteLine(" ~ {0} + 1 = {1} ", operand1, result);

выход: "~ 1 + 1 = -1"

1 Ответ

2 голосов
/ 29 апреля 2019

Есть целые числа со знаком и без знака. Целые числа со знаком могут содержать отрицательные значения, и поэтому «верхняя» часть диапазона отсчитывает от (0- (int.max / 2)) и вниз.

См. Эту статью: https://en.wikipedia.org/wiki/Two%27s_complement

если вы используете Unsigned int, он ведет себя так, как я думаю, вы ожидаете.

В знаковых целых числах старший бит определяет, является ли его отрицательное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...