2016-02-20 5 views
3

Пытаюсь портировать C# код:Какова цель этого тильда в C#

public static ulong WILDCARD_COLLISION_TYPE 
{ 
    get 
    { 
     int parse = ~0; 
     return (ulong)parse; 
    } 
} 

Если я правильно понимаю, это не ~ символ выполнить побитовое дополнение, так что точка ~0? а затем вернуть его?

+4

Это будет возвращать числовое значение, состоящее из 64 бит, все заданное, которое может использоваться в качестве битовой маски для проверки какого-либо флага. – Steve

+0

Это эквивалент combersome 'int parsed = unchecked ((int) 0xFFFFFFFF); 'вы можете поместить его так же, как' return 0xFFFFFFFFUL; ', но легко * miscount *' F's –

ответ

7

От ~ Operator documentation:

Оператор ~ выполняет операцию bitwise комплемента на ее операнд, который имеет эффект заднего хода каждый бит. Операторы комплемента Битовые предопределены для int, uint, long, and ulong.

Например:

unsigned int i = ~0; 

Result: Max number I can assign to i 

and 

signed int y = ~0; 

Result: -1 

поэтому передний подробнее можно сказать, что ~0 это просто INT со всеми битами, установленными в 1. Когда интерпретируется как беззнаковое это будет эквивалентны UINT_MAX. Когда интерпретируется как подписанное, это будет -1