На главную страницу

Решения к упражнениям из книги "Язык программирования С" Б. Керниган и Д. Ритчи

Упражнение 2.6.


Напишите функцию setbits(x,p,n,y) так, чтобы она возвращала аргумент x, в котором n битов, начиная с позиции p, равны n крайним правым битам аргумента y, а остальные биты не тронуты.
----------
/* Exercise 2.6 from "The C programming language" book by K&R */

#include <stdio.h>

/* sets n bit from position p in x like right n bits in y */
unsigned setbits(unsigned x, unsigned p, unsigned n, unsigned y)
{
	return (x | ((~(~0 << n) & y) << (p+1-n)));
}
int main(void)
{
	printf("%u\n",setbits(0x00, 5, 1, 0x01));
	return 0;
}
	
----------