włączeniu do poręcznej kopią ISO/IEC 23270:2006 — Information technology — Programming languages — C# i skręcić § 14.6. 4 świętego zapisu. Nie znajdziesz:
14.6.4 bitowe operatora uzupełnieniem
Dla operacji formularza ~ x, rozdzielczość przeciążenie operator jednoargumentowy (§14.2.3) stosowana jest, aby wybrać określoną operatora realizacja. Operand jest konwertowany na typ parametru wybranego operatora, a typ wyniku jest typem zwracanym przez operatora. Predefiniowane operatory dopełnienia bitowego to:
int operator ~(int x) ;
uint operator ~(uint x) ;
long operator ~(long x) ;
ulong operator ~(ulong x) ;
Dla każdego z tych operatorów wynikiem operacji jest bitowe uzupełnienie x.
Każdy rodzaj wyliczenie E domyślnie udostępnia następujące operatory bitowe dopełniacza:
E operator ~(E x);
Wynikiem oceny ~x
, gdzie x
jest wyrazem typu wyliczenia E
z bazowego typu U
, jest dokładnie taka sama jak oceniając unchecked((E)(~(U)x))
. Ten operator jest brany pod uwagę tylko przez jednooperacyjną rozdzielczość przeciążania operatora, gdy typem operacji jest wyliczenie typu E
(§14.2.3).
Zniesione (§ 14.2.7) formy uprzednio podnoszonych predefiniowanych operatorów uzupełnień bitowych zdefiniowanych powyżej również są wstępnie zdefiniowane.
W twoim przypadku ~31
jest taka sama jak ~ 0x0000001F
. Bitowalny komponent 0x0000001F
jest 0xFFFFFFE0
. Dlaczego po prostu nie napisali, że prawdziwa maska, której chcieli, jest poza mną.
Jest to uzupełnienie bitowe. Zobacz poniższy link. [Jak Czy bitowe Uzupełnienie Operator Pracy] [1] [1]: http://stackoverflow.com/questions/791328/how-does-the-bitwise-complement-operator-work – Nerdtron
Dla przyszłych ref tutaj jest lista operatorów C#. [C# Operators] (http://msdn.microsoft.com/en-us/library/6a71f45d.aspx) –