Для работы с битовыми полями в Apache Commons Lang существует замечательный класс org.apache.commons.lang3.BitField.
Для начала подключим к нашему проекту Maven зависимость Apache Commons Lang
1 2 3 4 5 |
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency> |
Класс BitField используется для снятия и установки определённых битов. Например, создадим экземпляр BitField:
1 |
BitField secondBit = new BitField(0b00000010); |
Мы создали экземпляр BitField, а в качестве маски передали ему значение с единицей на втором бите. Теперь создадим переменную, биты в которой мы будем проставлять:
1 |
int holder = 0; |
С помощью нашего экземпляра BitField установим значение второго бита переменной holder в единицу:
1 |
holder = secondBit.set(holder); |
Результат:
1 |
System.out.println("holder: " + Integer.toBinaryString(holder)); //10 |
Аналогичным способом установим значение пятого бита в единицу:
1 2 3 |
BitField fifthBit = new BitField(0b00010000); holder = fifthBit.set(holder); System.out.println("holder: " + Integer.toBinaryString(holder)); // 10010 |
Для сброса значения бита в ноль используется метод clear:
1 2 |
holder = secondBit.clear(holder); System.out.println("holder: " + Integer.toBinaryString(holder)); // 10000 |
Можно не только изменять значения одиночных битов, но и использовать несколько битов внутри holder для хранения значений:
1 2 3 |
BitField fourBits = new BitField(0b1111000000); holder =fourBits.setValue(holder, 5); // пять это 101 System.out.println("holder: " + Integer.toBinaryString(holder)); // 101010000 |