То, что я имею, является интранет подобный Знатоку репозиторий, где все сторонние библиотеки хранятся (не только библиотеки, но и их соответствующее исходное распределение с документацией, Javadoc и всем). Причина следующая:
Излагая ответ Ави:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010);
i equals 0x93 = b10010011
Скажите, что ваш i = 0xAB. В двоичном формате это: 10101011
Давайте пронумеруем каждую из битовых позиций.
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
Самый правый бит (наименее значимый) - это позиция «0». Самая левая (самая значимая) - это позиция 7.
Итак, следующие два значения, p и n, говорят: «Вы хотите изменить n битов, начиная с бита p». Итак, если p = 5 и n = 3, вы хотите начать с бита номер 5, и в целом вы изменяете 3 бита. Что означает в этом примере биты 5, 4, 3. «101»
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
| |
---------
(Modifying these three bits)
Как мы их изменяем? Мы их заменяем. С другим набором из 3 бит. Три младших бита из y.
Итак, вот y:
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 0
И самые правые биты будут битами 2, 1, 0. или значением «010». Конечно, если значение n = 6, то вы
Например:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010);
i equals 0x93 = b10010011
Мы берем 3 бита, начиная с позиции 5 в x (101), и заменяем их тремя крайними правыми битами из y (010).
Этот «возможный ответ» - это просто код без комментариев. Неудивительно, что это вам не помогло.
Вопрос (и, вероятно, ответчики) предполагают, что вы знакомы с битовыми полями. Подобные вещи очень распространены во встроенном программировании, когда вы управляете аппаратными регистрами.
Скажем, есть регистр, который, помимо прочего, устанавливает уровень громкости звука. В то же время он мог бы позволяют выбрать динамики или микрофоны и тому подобное. Биты могут выглядеть следующим образом:
ssAAAmxx - Каждая буква представляет собой битовое поле внутри этого числа. Чтобы изменить громкость, вы должны изменить значение «AAA». Теперь, допустим, у вас есть что-то в вашей программе, позволяющее регулировать громкость. Это простой элемент управления, и он всегда возвращает число от 0 до 7. Формат для этого выглядит следующим образом:
xxxxxAAA - Ваша задача состоит в том, чтобы взять из него биты AAA (назовите его «y»), и установите их в это число выше (назовите его "x"), не изменяя биты, не являющиеся буквами A. Таким образом, задача будет выглядеть так: «Возьмите 3 крайних правых бита y и установите их в x, начиная с бита 5 (помните, они считают биты с нуля). Затем,
Идея состоит в том, что y обычно меньше, чем n бит, но в случае, если это не так используйте только n . На английском языке задача состоит в том, чтобы вставить y в x , начиная с p , используя ширину поля n .
Заменить n битов x, начиная с позиции p, n крайними правыми битами y.
И, вероятно, вам стоит воспользоваться функцией getbits ()
из главы 2.9