Условие задачи:
Реализуйте метод flipBit, изменяющий значение одного бита заданного целого числа на противоположное.Договоримся, что биты нумеруются от младшего (индекс 1) к старшему (индекс 32).
А вот его решение:
public static int flipBit(int value, int bitIndex) {
return value ^ (1 << bitIndex-1);
}
Вопрос: никак не могу понять что происходит здесь:
(1 << bitIndex-1)
разъясните пож-а.
Вопрос: никак не могу понять что происходит здесь: (1 << bitIndex-1)
Происходит сдвиг битов влево (или тупо возведение двойки в степень) bitIndex-1
На самом деле более подробно можно посмотреть тут
Вкратце 1 можно представить примерно как 00000001
<< — побитовый сдвиг влево
в итоге например если bitIndex равно 3, то 1 << 3 (смещаем единицу на три разряда влево) получается
00001000 // 8
а при bitIndex - 1 получается соответственно:
bitIndex - 1 → 1 << 2 → 00000100 // 4
Хотя в итоге чему равно значение в десятичной системе не важно, но это просто, на заметку
Происходит сдвиг битов влево, на место новых битов становятся нули. По сути это возведение двойки в степень.
1 << 5 // 100000 или 32
Вопрос: никак не могу понять что происходит здесь:
(1 << bitIndex-1)
Здесь происходит сдвиг битов в 1 влево на bitIndex-1 позиций.
Продвижение своими сайтами как стратегия роста и независимости