Guest User

Untitled

a guest
Jun 23rd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. /*
  4. * CSAPP exercise 2.63
  5. * */
  6.  
  7. /*
  8. * 用算术右移, 完成逻辑右移
  9. * */
  10. unsigned srl(unsigned x, int k);
  11.  
  12. /*
  13. * 用逻辑右移, 完成算术右移
  14. * */
  15. int sra(int x, int k);
  16.  
  17. int main() {
  18. printf("%x \n", sra(-1, 3));
  19. printf("%x \n", sra(0x40000000, 3));
  20. printf("%x \n", sra(0x80000000, 3));
  21.  
  22. return 0;
  23. }
  24.  
  25. unsigned srl(unsigned x, int k) {
  26. unsigned xsra = (int) x >> k;
  27. int w = sizeof(int) << 3;
  28. int right_value = -1 << (w - k);
  29. return xsra & (~right_value);
  30. }
  31.  
  32. int sra(int x, int k) {
  33. int xsrl = (unsigned) x >> k;
  34.  
  35. int w = sizeof(int) << 3;
  36. int mask = -1 << (w - k);
  37.  
  38. int m = 1 << (w - 1);
  39. int most_high_bit = m & x;
  40. mask &= !most_high_bit - 1;
  41. return xsrl | mask;
  42. }
Add Comment
Please, Sign In to add comment