概述
public int divide(int dividend, int divisor) {
int rs = 0;
if (dividend==0){
return 0;
}
if (dividend==Integer.MIN_VALUE&&divisor==-1){
return Integer.MAX_VALUE;
}
boolean flag;
flag = (dividend ^ divisor) <0;
long dd = (((long)dividend^((long)dividend>>31))-((long)dividend>>31));
long ds = (((long)divisor^((long)divisor>>31))-((long)divisor>>31));
for (int i = 31; i >= 0; i--) {
if ((dd>>i)>=ds){
rs += 1<<i;
dd -= ds<<i;
}
}
return flag ? -rs : rs;
}
位运算符
>> 右移
- 右移一位相当于除2
<< 左移
- 左移一位相当于乘2
^ 异或
- 1^0 为1
- 0^1 为1
- 1^1 为0
- 0^0 为0
位运算符计算绝对值
//int 为32位,右移31位得到符号位,赋值给i,若为正,则i==0;负,i==-1
int i = n >> 31;
//一个数^0==原数,数^-1==数的绝对值-1
==》 绝对值=负数异或-1取反+1
return ((n ^ i) - i);
最后
以上就是体贴小兔子为你收集整理的(位移运算)两数相除的全部内容,希望文章能够帮你解决(位移运算)两数相除所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复