itag
длинный. 0xFFFFFFFFFFFFFC00
это улонг. Вы пытаетесь смешать оба в выражении &=
, которое не работает.
Почему ваш литерал улонг? MSDN говорит :
Если у литерала нет суффикса, он имеет первый из этих типов, в котором его значение может быть представлено: int, uint, long, ulong.
Поскольку число слишком велико для int, uint или long, ваш литерал становится ulong.
У вас есть два варианта: либо объявить itag
как ulong, как предлагали другие, либо (поразрядно) преобразовать ваш литерал в long:
itag &= unchecked((long)0xFFFFFFFFFFFFFC00);
Это превратит ваш ulong в (отрицательный) long.