Страницы

Translate

суббота, 3 августа 2013 г.

Упражнение 2.6. Напишите функцию setbits(x, p, n, y), возвращающую значение x.

Упражнение 2.6. Напишите функцию setbits(x, p, n, y), возвращающую значение x, в котором n битов, начиная с p-й позиции, заменены на n правых разрядов из y (остальные биты не изменяются).


#include <stdio.h>

unsigned setbits(unsigned int x, int p, int n, unsigned int y);
void bin(unsigned int n);//просмотр десятичных чисел в двоичном виде

int main()
{
    unsigned int x, y;
    int p, n;
    
    printf("Enter the numbers\nx: ");
    scanf("%d", &x);
    bin(x);
    printf("\n");
    printf("p: ");
    scanf("%d", &p);
    printf("n: ");
    scanf("%d", &n);
    printf("y: ");
    scanf("%d", &y);
    bin(y);
    printf("\n");
    x = setbits(x, p, n, y);
    printf("%d\n", x);
    bin(x);
    return 0;
}

/*setbits(x, p, n, y)*/

unsigned setbits(unsigned int x, int p, int n, unsigned int y)
{
    return (x & ~(~(~0<<n)<<(p+1-n))) | ((y&~(~0<<n))<<(p+1-n));
}

void bin(unsigned int n) //
{
    int m, c, i, count, j;
    c = i = n;
    for(count = 0; n>=2; count++)
        n = n/2;
    m = count + 1;
    unsigned int x[m];
    while (i>=2)
    {
        i = i/2;
        c = c%2;
        x[count] = c;
        c=i;
        count--;
    }
    x[0] = i;
    for(j=0; j<=((sizeof(x)/4) - 1); j++)
        printf("%d", x[j]);
}


Результат:


Комментариев нет:

Отправить комментарий