почему -3 == ~ 2 в C # - PullRequest
       12

почему -3 == ~ 2 в C #

37 голосов
/ 17 декабря 2010

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

код:

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

выход:

equal

Ответы [ 6 ]

61 голосов
/ 17 декабря 2010

Потому что двоичная арифметика с двумя дополнениями делает это так

Извлечено со страницы википедии и расширено:

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

И, как вы можете видеть, все биты переворачиваются, что делает битовый оператор NOT (~) .

8 голосов
/ 17 декабря 2010

В этом сообщении описывается, почему:

Что такое тильда (~) в определении перечисления?

- это оператор дополнения унарного числа -он переворачивает биты своего операнда.в арифметике с дополнением до двух, ~ x == -x-1

3 голосов
/ 17 декабря 2010

Это связано с дополнительным представлением двух целых чисел со знаком: http://en.wikipedia.org/wiki/Twos_complement

2 голосов
/ 17 декабря 2010

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

0 голосов
/ 17 декабря 2010

Дополнение к двум из трех:

1 ... 1101

Дополнение (подписанное) к 2:

1 ... 1101

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

Одно дополнение: перевернуть биты.Дополнение двух: дополнение +1.

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

0 голосов
/ 17 декабря 2010

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

"Оператор ~ выполняет побитовое дополнить операцию над своим операндом, который имеет эффект обращения каждого немного. Побитовые операторы дополнения предопределенный для int, uint, long и ULONG. "

* 1008 MSDN *

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