我是靠谱客的博主 体贴小兔子,最近开发中收集的这篇文章主要介绍(位移运算)两数相除,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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);

最后

以上就是体贴小兔子为你收集整理的(位移运算)两数相除的全部内容,希望文章能够帮你解决(位移运算)两数相除所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部