унарный оператор НЕ

Этот оператор является унарным и только префиксным, он инвертирует (изменяет) все разряды (биты) своего операнда. Единицы становятся нулями, а нуля — единицами. Положительные числа становятся отрицательными, а отрицательные становятся положительными. При этом инвертируемое значение уменьшается на 1. Поэтому, что бы получить точную копию числа с обратным знаком, еще нужно прибавить 1.
x
~x
0
1
1
0
Значение 3 в 32 разрядном компьютере в двоичном счислении:
0000 0000 0000 0000 0000 0000 0000 0011
оператор НЕ (~) меняет все биты на противоположные, это число -4
1111 1111 1111 1111 1111 1111 1111 1100
прибавляем единицу
0000 0000 0000 0000 0000 0000 0000 0001
получаем число 3 с обратным знаком
1111 1111 1111 1111 1111 1111 1111 1101
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class Program {
  •  public static int Main() {
  •   int val = 3;
  •  
  •   Console.WriteLine(~val);
  •   //нужно добавить единицу, что бы получить точную копию числа с обратным знаком
  •   Console.WriteLine(~val + 1);
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
-4
-3