Java: Проверка, если немного 0 или 1 в длинном

Вы могли использовать Microsoft. VisualBasic. Вход. FileLogTraceListener, который прибывает встроенный с Платформой.NET. Не позволяйте VisualBasic в пространстве имен испугать Вас, необходимо будет просто сослаться на блок microsoft.visualbasic.dll, и это должно хорошо работать с C#.

69
задан Ande TURNER 27 December 2012 в 21:06
поделиться

9 ответов

Я бы использовал:

if ((value & (1L << x)) != 0)
{
   // The bit was set
}

(Возможно, вам удастся обойтись меньшим количеством скобок, но я никогда не помню приоритета побитовых операций.)

166
ответ дан 24 November 2019 в 13:32
поделиться

Значение бита 2 ^ x - «переменная & (1 << x)»

2
ответ дан 24 November 2019 в 13:32
поделиться

Для n -го LSB (младший значащий бит) должно работать следующее:

boolean isSet = (value & (1 << n)) != 0;
8
ответ дан 24 November 2019 в 13:32
поделиться

Битовый сдвиг вправо на x и проверка младшего бита.

4
ответ дан 24 November 2019 в 13:32
поделиться

Вы также можете использовать

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 "полностью эквивалентны

12
ответ дан 24 November 2019 в 13:32
поделиться

Другой вариант:

if (BigInteger.valueOf(value).testBit(x)) {
    // ...
}
90
ответ дан 24 November 2019 в 13:32
поделиться

Интересно, что:

  if (((value >>> x) & 1) != 0) {

  }

.. лучше, потому что не имеет значения, длинное значение или нет, или хуже, потому что оно менее очевидно.

Том Хотин - tackline 7 июля в 14:16.

14
ответ дан 24 November 2019 в 13:32
поделиться

Вы можете проверить BitSet: http: // java.sun.com/javase/6/docs/api/java/util/BitSet.html

6
ответ дан 24 November 2019 в 13:32
поделиться

Устраните сдвиг битов и его сложности и используйте LUT для правого и операнда.

-2
ответ дан 24 November 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: