fork download
  1. #include <stdio.h>
  2. #include <memory.h>
  3.  
  4. unsigned getbits(unsigned x, int p, int n);
  5. void printbits(unsigned int x);
  6. unsigned int setbits(unsigned int x, int p, int n, unsigned int y);
  7.  
  8.  
  9. int main(void){
  10. unsigned int x = 0;
  11. unsigned int y = 198;
  12. unsigned int res;
  13.  
  14. res = setbits(x, 7, 3, y);
  15. printbits(res);
  16.  
  17. return 0;
  18. }
  19.  
  20. /*Извлекает n бит начиная с p-й позиции*/
  21. unsigned getbits(unsigned x, int p, int n){
  22. return (x >> (p+1-n)) & ~(~0 << n);
  23. }
  24.  
  25. unsigned int setbits(unsigned int x, int p, int n, unsigned int y){
  26. unsigned int bit_field;
  27.  
  28. printf("%s", "x = ");
  29. printbits(x);
  30. printf("%s", "y = ");
  31. printbits(y);
  32. /*Извлечем n крайних правых бит аргумента y*/
  33. bit_field = getbits(y, n-1, n);
  34. printf("%s", "f = ");
  35. printbits(bit_field);
  36. printf("%s", "r = ");
  37. printbits(bit_field << (p+1-n));
  38. return x | (bit_field << (p+1-n));
  39. }
  40.  
  41. void printbits(unsigned int x){
  42. int i;
  43. int mask = 0x1;
  44.  
  45. for(i = 15; i >= 0; i--){
  46. printf("%d", (x >> i) & mask);
  47. if(!(i % 4)) putchar(' ');
  48. }
  49. putchar('\n');
  50. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
x = 0000 0000 0000 0000 
y = 0000 0000 1100 0110 
f = 0000 0000 0000 0110 
r = 0000 0000 1100 0000 
0000 0000 1100 0000