中易网

《深入理解计算机系统》,除法与算术右移

答案:1  悬赏:60  
解决时间 2021-01-11 22:54
  • 提问者网友:孤山下
  • 2021-01-11 18:23
《深入理解计算机系统》,除法与算术右移
最佳答案
  • 二级知识专家网友:迷人又混蛋
  • 2021-01-11 19:50
这题考察的是对右移运算的理解,右移算符是>>,在一般情况下可以替代除运算。右移一位就是除以2。除以16就得右移4位。
int div16( int x ) {
return x >> 4;
}
int main( int, char** ) 
{
cout<< div16( 32 );// =2
cout << div16( 33 );// 2
cout << div16( 16 );//1
        return 0;
}追问请看完提问,用右移实现除法不应该改变结果,否则就没有意义。比如3/2=1,-3/2=-1,即结果为正数的应该取其上界,负数的取其下界追答int div16( int x ) {
unsigned int t = x;
t = ( ( t >> 31 ) << 4 ) - ( t >> 31 );
return ( (int)t + x ) >> 4;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息