Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /*
- * CSAPP exercise 2.63
- * */
- /*
- * 用算术右移, 完成逻辑右移
- * */
- unsigned srl(unsigned x, int k);
- /*
- * 用逻辑右移, 完成算术右移
- * */
- int sra(int x, int k);
- int main() {
- printf("%x \n", sra(-1, 3));
- printf("%x \n", sra(0x40000000, 3));
- printf("%x \n", sra(0x80000000, 3));
- return 0;
- }
- unsigned srl(unsigned x, int k) {
- unsigned xsra = (int) x >> k;
- int w = sizeof(int) << 3;
- int right_value = -1 << (w - k);
- return xsra & (~right_value);
- }
- int sra(int x, int k) {
- int xsrl = (unsigned) x >> k;
- int w = sizeof(int) << 3;
- int mask = -1 << (w - k);
- int m = 1 << (w - 1);
- int most_high_bit = m & x;
- mask &= !most_high_bit - 1;
- return xsrl | mask;
- }
Add Comment
Please, Sign In to add comment