Вы могли использовать Microsoft. VisualBasic. Вход. FileLogTraceListener, который прибывает встроенный с Платформой.NET. Не позволяйте VisualBasic в пространстве имен испугать Вас, необходимо будет просто сослаться на блок microsoft.visualbasic.dll, и это должно хорошо работать с C#.
Я бы использовал:
if ((value & (1L << x)) != 0)
{
// The bit was set
}
(Возможно, вам удастся обойтись меньшим количеством скобок, но я никогда не помню приоритета побитовых операций.)
Для n
-го LSB (младший значащий бит) должно работать следующее:
boolean isSet = (value & (1 << n)) != 0;
Вы также можете использовать
bool isSet = ((value>>x) & 1) != 0;
EDIT: разница между " (значение >> x) & 1
" и " значение & (1 << x )
"полагается на поведение, когда x больше размера типа" значение "(32 в вашем случае).
В этом конкретном случае с" (значение >> x) & 1
"у вас будет знак значения, тогда как вы получите 0 с" value & (1 << x)
"(иногда полезно получить знак бита, если x слишком велик ).
Если вы предпочитаете иметь в этом случае 0, вы можете использовать оператор « >>>
» вместо этого, если « >>
»
Итак, " ((значение >>> x) & 1)! = 0
" и " (значение & (1 << x))!= 0
"полностью эквивалентны
Другой вариант:
if (BigInteger.valueOf(value).testBit(x)) {
// ...
}
Интересно, что:
if (((value >>> x) & 1) != 0) {
}
.. лучше, потому что не имеет значения, длинное значение или нет, или хуже, потому что оно менее очевидно.
Том Хотин - tackline 7 июля в 14:16.
Вы можете проверить BitSet: http: // java.sun.com/javase/6/docs/api/java/util/BitSet.html
Устраните сдвиг битов и его сложности и используйте LUT для правого и
операнда.