负数的除法和右移的区别 |
您所在的位置:网站首页 › 二进制除法的方法 › 负数的除法和右移的区别 |
A和B两个函数的结果是相同的,求M和N. #define M ? #define N ? int A(int x,int y) { int result = 0; result = x*M+y/N; return result; } int B(int x,int y) { int t = x; x>1得到的是-2其实这是因为除法是向0取整,而右移位是向负取整 -3/2=-1.5=-1(向0取整),-3>>1=-1.5=-2(向负取整); 如果我们需要右移达到的效果和除法一样,可以采取下列公式: 假设除数为2^N,负数x的除法可以用以下方法来代替: (x + 2^N - 1) >> N 在这道题里就是(x+2^3-1)>>3 =(x+7)>>3 也就是说A函数中的y/N和B函数中的if(y>=3; 取到的效果是一样的,都是y/8,所以N为8
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |