2016-04-30 2 views
0

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 
       --- ??? 

Что мне не хватает?

+1

Индексация начинается с нуля в C. Предположительно, «позиция 2» является третьим битом. – EOF

+0

Без [mcve] невозможно диагностировать ваш код. – Olaf

+0

Хорошо, мне было интересно об этом и пробовал в обоих направлениях. Я отредактировал свой вопрос, чтобы отразить правильное позиционирование, но для меня это все еще не имеет смысла. – gwg

ответ

1

Спецификация проблемы немного неоднозначна. Вы интерпретируете «n бит, начинающихся в позиции p», чтобы обозначать биты p, p + 1, ..., p + n-1. На странице, на которую вы ссылались, говорят, что n бит, начинающихся с позиции p , являются битами p, p-1, ..., p-n + 1. Итак, 3 бита, начиная с бит 2, будут битами 2, 1, 0, самыми правыми тремя битами.

Смежные вопросы