Какой метод вы бы использовали, чтобы определить, является ли бит, представляющий 2 ^ x, 1 или 0?
Java: проверка, является ли бит 0 или 1 в длинном
Ответ 1
Я бы использовал:
if ((value & (1L << x)) != 0)
{
   // The bit was set
}
(Вы можете уйти с меньшим количеством скобок, но я никогда не помню приоритет побитовых операций.)
Ответ 2
Другая альтернатива:
if (BigInteger.valueOf(value).testBit(x)) {
    // ...
}
		Ответ 3
Интересно, если:
  if (((value >>> x) & 1) != 0) {
  }
.. лучше, потому что неважно, длинное или нет значение, или если оно хуже, потому что оно менее очевидно.
Tom Hawtin - tackline 7 июля в 14:16
Ответ 4
Вы также можете использовать
bool isSet = ((value>>x) & 1) != 0;
EDIT: разница между "(value>>x) & 1" и "value & (1<<x)" зависит от поведения, когда x больше размера типа "значение" (32 в вашем случае).
В этом конкретном случае с "(value>>x) & 1" у вас будет знак значения, тогда как вы получите 0 с "value & (1<<x)" (иногда полезно получить знак бита, если x слишком большой).
Если вы предпочитаете иметь 0 в этом случае, вы можете использовать оператор ">>>", вместо этого, если ">>" 
Итак, "((value>>>x) & 1) != 0" и "(value & (1<<x)) != 0" полностью эквивалентны
Ответ 5
Для n -ного младшего разряда (младший бит) должно работать следующее:
boolean isSet = (value & (1 << n)) != 0;
		Ответ 6
Возможно, вы захотите проверить BitSet: http://java.sun.com/javase/6/docs/api/java/util/BitSet.html
Ответ 7
Перемещение битов справа на x и проверка младшего бита.
Ответ 8
Значение бит 2 ^ x является "переменной и (1 < x)"
Ответ 9
В Java следующее работает отлично:
if (value << ~x < 0) {
   // xth bit set
} else {
   // xth bit not set
}
 value и x может быть int или long (и не обязательно должны быть одинаковыми).
  Осторожность для программистов, отличных от Java: предыдущее выражение работает в Java, потому что на этом языке операторы сдвига бит применяются только к 5 (или 6, в случае long) бит операнда правой стороны. Это неявно переводит выражение в value << (~x & 31) (или value << (~x & 63), если value есть long).
В частности, в C отрицательный сдвиг рассчитывает поведение undefined, поэтому этот тест не обязательно будет работать (хотя он может, в зависимости от вашей конкретной комбинации компилятора/процессора).
Ответ 10
объявить temp int и сделать его равным оригиналу. затем сдвиньте temp → x раз, так что бит, который вы хотите проверить, находится в последней позиции. затем сделайте temp и 0xf, чтобы удалить предыдущие бит. Теперь осталось с последним бит. Наконец, если (y и 1 == 0), если последний бит равен 1, то должен равняться 0, else будет равен 1. Его либо тот, либо (y + 0x1 == 0)... не слишком уверен. обманывать и видеть
Ответ 11
Если кто-то не очень удобен с побитовыми операторами, то под кодом можно попытаться его программно решить. Есть два пути.
1) Используйте функциональность Java-языка для получения строки двоичного формата, а затем проверьте символ в определенной позиции
2) Продолжайте разделение на 2 и определите значение бит в определенной позиции.
public static void main(String[] args) {
    Integer n =1000;
    String binaryFormat =  Integer.toString(n, 2);
    int binaryFormatLength = binaryFormat.length();
    System.out.println("binaryFormat="+binaryFormat);
    for(int i = 1;i<10;i++){
        System.out.println("isBitSet("+n+","+i+")"+isBitSet(n,i));
        System.out.println((binaryFormatLength>=i && binaryFormat.charAt(binaryFormatLength-i)=='1'));
    }
}
public static boolean isBitSet(int number, int position){
    int currPos =1;
    int temp = number;
    while(number!=0 && currPos<= position){
        if(temp%2 == 1 && currPos == position)
            return true;
        else{
            temp = temp/2;
            currPos ++;
        }
    }
    return false;
}
Выход
binaryFormat=1111101000
isBitSet(1000,1)false
false
isBitSet(1000,2)false
false
isBitSet(1000,3)false
false
isBitSet(1000,4)true
true
isBitSet(1000,5)false
false
isBitSet(1000,6)true
true
isBitSet(1000,7)true
true
isBitSet(1000,8)true
true
isBitSet(1000,9)true
true
		Ответ 12
Мой вклад - игнорировать предыдущий
public class TestBits { 
    public static void main(String[] args) { 
        byte bit1 = 0b00000001;     
        byte bit2 = 0b00000010;
        byte bit3 = 0b00000100;
        byte bit4 = 0b00001000;
        byte bit5 = 0b00010000;
        byte bit6 = 0b00100000;
        byte bit7 = 0b01000000;
        byte myValue = 9;                        // any value
        if (((myValue >>> 3) & bit1 ) != 0) {    //  shift 3 to test bit4
            System.out.println(" ON "); 
        }
    } 
}
		Ответ 13
Я закодировал небольшой статический класс, который выполняет некоторые операции с битами.
public final class Bitfield {
  private Bitfield() {}
  // ********************************************************************
  // * TEST
  // ********************************************************************
  public static boolean testBit(final int pos, final int bitfield) {
      return (bitfield & (1 << pos)) == (1 << pos);
  }
  public static boolean testNum(final int num, final int bitfield) {
      return (bitfield & num) == num;
  }
  // ********************************************************************
  // * SET
  // ********************************************************************
  public static int setBit(final int pos, final int bitfield) {
     return bitfield | (1 << pos);
  }
  public static int addNum(final int number, final int bitfield) {
      return bitfield | number;
  }
  // ********************************************************************
  // * CLEAR
  // ********************************************************************
  public static int clearBit(final int pos, final int bitfield) {
      return bitfield ^ (1 << pos);
  }
  public static int clearNum(final int num, final int bitfield) {
      return bitfield ^ num;
  }
  }
Если возникают вопросы, просто напишите мне письмо.
Хорошее программирование!
Ответ 14
Устраните битгифтинг и его тонкости и используйте LUT для правильного операнда and.