sra实现用逻辑右移完成算数右移
srl实现用算数右移完成逻辑右移
记住!逻辑右移依据最高位,如果为1右移的全为1,否则全为0,逻辑右移用于无符号数
算数右移移位的都是0, 用于有符号数
左移只移0
通过这道题目:经验: 获取字长用 w = sizeof(int) ,获得好多1,利用 1<<k - 1
3 int sra(int x,int k)
4 {
5 int xsrl = (unsigned)x >> k;
6 int w = sizeof(int)*8;
7 int mask = ((1<<k)-1) << (w-k);
8 int lmb = x&(1<<(w-1));
9 lmb&& (xsrl |= mask);
10 return xsrl;
11 }
12 int srl(unsigned x,int k)
13 {
14 unsigned xsra = (int)x >> k;
15 int w =sizeof(unsigned)*8;
16 int lmb = x & (1<<(w-1));
17 int mask = (1<<(w-k))-1;
18 lmb && mask && (xsra &= mask);
19 return xsra;
20 }