Побитовые операции(код)

#include<conio.h>
#include<stdio.h>
#include<cstdlib>
int main()
{
 unsigned short z, c, v=0;
 int x;
 x= rand()%16;
 v=(z << x) || ();
 printf("x = %d\n",x);
 printf("V = %i\n",v);
 getch();
 return 0;
}

Помогите исправить код, нужно заполнить два 16-битовые числа z и c. После взять число x, случайную точку разрыва, от 0 до 16. И заполнить число v таким образом, чтобы до случайного числа было z, после - с. Пример: случайное число 4 => v=zzzzcccccccccccc;


Ответы (1 шт):

Автор решения: Harry

Попробуйте так:

unsigned short mask = 0xFFFF << (16-x);
v = (z&mask)|(c&~mask);

Если, конечно, имеется в виду, чтобы в v были соответствующие биты z и c.

zzzzzzzzzzzzzzzz
||||
vvvv

zzzzcccccccccccc

    ^^^^^^^^^^^^
    ||||||||||||
cccccccccccccccc
→ Ссылка