#include <stdio.h>
#include <limits.h>
/*总体说明:逻辑右移和算数右移只有在最高位为1的情况下才会不同*/
int sra(int x,int k){
/*Perform shift logically*/
int xshl=(unsigned)x>>k;
int w=sizeof(int)<<3;
/*核心运算*/
(x&INT_MIN)&&(xshl|=(-1)<<(w-k));
return xshl;
}
unsigned srl(unsigned x,int k){
/*Perform shift arithmetically*/
unsigned xsra=(int)x>>k;
int w=sizeof(int)<<3;
/*核心运算*/
(x&INT_MIN)&&(xsra^=(-1)<<(w-k));
return xsra;
}
深入了解计算机系统 习题2.63
最新推荐文章于 2024-03-31 20:38:24 发布