Подтвердить что ты не робот

Почему -3 == ~ 2 в С#

Невозможно понять. Почему вывод "равен"

код:

 if (-3 == ~2)           
    Console.WriteLine("equal");
 else
    Console.WriteLine("not equal");

выход:

equal
4b9b3361

Ответ 1

Потому что двухкомбинированная бит-арифметика делает так

Cribbed со страницы wikipedia и расширена:

Most
Significant
Bit          6  5  4  3  2  1  0   Value
0            0  0  0  0  0  1  1   3
0            0  0  0  0  0  1  0   2
0            0  0  0  0  0  0  1   1 
0            0  0  0  0  0  0  0   0
1            1  1  1  1  1  1  1   -1
1            1  1  1  1  1  1  0   -2
1            1  1  1  1  1  0  1   -3
1            1  1  1  1  1  0  0   -4

Итак, вы получаете:

0  0  0  0  0  0  1  0  =  2
1  1  1  1  1  1  0  1  = -3

И, как вы можете видеть, все биты перевернуты, что делает

Ответ 4

Потому что он использует два дополнения.

Ответ 5

Существует большая разница между этими двумя операторами.

"Оператор ~ выполняет поразрядное операция дополнения на операнде, что приводит к немного. Операторы побитового дополнения предопределено для int, uint, long и ULONG".

msdn

Ответ 6

Два дополнения 3:

1... 1101

Подписанное одно дополнение к 2 равно:

1... 1101

Это легко сделать:

Одно дополнение: Переверните биты. Два дополнения: одно дополнение + 1.

Почему это полезно? Компьютеры могут вычитать числа, просто перевернув и добавив бит.