Этот оператор является унарным и только префиксным, он инвертирует (изменяет) все разряды (биты) своего операнда. Единицы становятся нулями, а нуля — единицами. Положительные числа становятся отрицательными, а отрицательные становятся положительными. При этом инвертируемое значение уменьшается на 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
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;
-
}
}
using
System;
class
Program {
-
public
static
int
Main() {
-
int
val = 3;
-
Console.WriteLine(~val);
-
//нужно добавить единицу, что бы получить точную копию числа с обратным знаком
-
Console.WriteLine(~val + 1);
-
Console.ReadKey();
-
return
0;
-
}
}
-4
-3
-3