Pergunta de entrevista da empresa NVIDIA

Write a function to swap n bits of a variable from position x and position y

Respostas da entrevista

Sigiloso

29 de ago. de 2012

/* EXAMPLE * val = 10110001, n = 2, x = 4, y = 0 * mask = 00000011 * pa = 00001011 & 00000011 = 00000011 * pb = 10110001 & 00000011 = 00000001 * val = 10000000 | 00000011 | 00010000 = 10010011 */ int swap_nbits(int val, unsigned int n, unsigned int x, unsigned int y) { unsigned int mask = 0; // eg. 111 for n=3 for (int i = 0; i > x) & mask; unsigned int pb = (val >> y) & mask; // non-swapped_bits OR swapped_part_a OR swapped_part_b (note shift values swapped) val = (val & ~((mask << x) | (mask << y))) | (pa << y) | (pb << x); return n; }

4

Sigiloso

18 de mai. de 2012

#include #define THE_NUMBER 0x7 int main(int argc,void* argv[]) { unsigned int n = 0 ; unsigned int num = THE_NUMBER; unsigned int tmp = 0; unsigned int start = 0 ; unsigned int end = 3 ; unsigned int len = end-start+1; unsigned int to_rotate = (num >> start) & ( ( 1 >= 1; } num |= (tmp << start); printf("num=0x%x \n",num); return 0; }