побитовые сдвиги

932
31 января 2017, 21:01

Условие задачи:

Реализуйте метод flipBit, изменяющий значение одного бита заданного целого числа на противоположное.Договоримся, что биты нумеруются от младшего (индекс 1) к старшему (индекс 32).

А вот его решение:

public static int flipBit(int value, int bitIndex) {
    return value ^ (1 << bitIndex-1);
}

Вопрос: никак не могу понять что происходит здесь:

(1 << bitIndex-1)

разъясните пож-а.

Answer 1

Вопрос: никак не могу понять что происходит здесь: (1 << bitIndex-1)

Происходит сдвиг битов влево (или тупо возведение двойки в степень) bitIndex-1

На самом деле более подробно можно посмотреть тут

Вкратце 1 можно представить примерно как 00000001

<< — побитовый сдвиг влево

в итоге например если bitIndex равно 3, то 1 << 3 (смещаем единицу на три разряда влево) получается

00001000 // 8

а при bitIndex - 1 получается соответственно:

bitIndex - 1   1 << 2  00000100 // 4

Хотя в итоге чему равно значение в десятичной системе не важно, но это просто, на заметку

Answer 2

Происходит сдвиг битов влево, на место новых битов становятся нули. По сути это возведение двойки в степень.

1 << 5 // 100000 или 32

Answer 3

Вопрос: никак не могу понять что происходит здесь:

   (1 << bitIndex-1)

Здесь происходит сдвиг битов в 1 влево на bitIndex-1 позиций.

READ ALSO
Прокрутка длинного текста в ToolBar Title

Прокрутка длинного текста в ToolBar Title

В vk, например, длинные имя и фамилия прокручиваются по кругу, как такое реализовать?

308
Русский язык в iText

Русский язык в iText

Я хочу вытянуть из сайта определенную часть и сделать из этого куска pdf документСоздаю документ по примеру из официального сайта iText:

468
Отрисовка полигона с помощью JPanel

Отрисовка полигона с помощью JPanel

Нужно нарисовать полигон с кординнатамиПроблема в том что открываеться окно но не отрисовывается полигон

335