K & R-й упражнение 2-6:K & R в упражнении 2-6: Не понимаю, вход/выход
Написать функцию
setbits(x,p,n,y)
, которая возвращаетx
сn
битами, которые начинаются в положенииp
набора в крайнем правомn
битy
, оставив остальные биты без изменений.
Вот моя интерпретация пример ввода/вывода:
unsigned x = 315;
int p = 2;
int n = 3;
unsigned y = 9;
printf("%d\n", setbits(x, p, n, y)); // 295
А вот мои рассуждения.
3 бита в положении 2 для 315:
0000 0001 0011 1011
- --
3 крайние правые биты для 9:
0000 0000 0000 1001
---
Set 3 крайние правые биты для 9 до 3-х битов, начиная с 2 по 315 => 295 :
0000 0001 0010 0111
- --
Я написал код, а затем хотел, чтобы проверить его от других решений, for example. Два из них, которые я нашел в Интернете, дают другой ответ, 313:
0000 0001 0011 1001
--- ???
Что мне не хватает?
Индексация начинается с нуля в C. Предположительно, «позиция 2» является третьим битом. – EOF
Без [mcve] невозможно диагностировать ваш код. – Olaf
Хорошо, мне было интересно об этом и пробовал в обоих направлениях. Я отредактировал свой вопрос, чтобы отразить правильное позиционирование, но для меня это все еще не имеет смысла. – gwg