首页 > 编程知识 正文

java中取余中的余数怎么取,java位运算技巧

时间:2023-05-04 10:25:22 阅读:28597 作者:1226

将馀数运算符设为“%”。 但是,以前CPU通过以下方法计算盈馀: (请注意,该方法仅对2的n次幂系统有效。 )

x(2^n-1 ) ) ) )。

举个例子:

因为9 % 4 //是2^2; 因此,可以使用位运算x(2^n-1 )来代替取馀数

=9(4-1) )。

=9 3

=1001 0011

=0001

=1

原理:

二进制乘以2^n,相当于向左移位n位;

二进制除以2^n,相当于向右移位n位;

二进制数和一的操作仍然是原始二进制数

举个例子:

将9转换为二进制值为1001

1001=1*2^3 0*2^2 0*2^1 1*2^0

那么,如下。

1001 * 2^1

=(1*2^30*2^20*2^11*2^0)2^1

=2*2^3 0*2^2 0*2^1 2*2^0

=2^4 0*2^3 0*2^2 1*2^1 0*2^0

=10010

可知1001*2相当于将1001向左偏移1位设为10010

1001/2^1

=(1*2^30*2^20*2^11*2^0)/2^1

=1*2^2 0*2^1 0*2^0

=100

可知1001/2相当于将1001向右偏移1位设为100,而且向右偏移1是1001/2的馀数

要将任意数转换为二进制数,请尝试将该二进制数的各位(1或0 )分别乘以2^n。 (这里的n从右开始依次是0、1、2……)

我们用x表示普通n位的二进制各位。 (这个x不需要烦恼。 那个1和0都可以。 只是,这样表示也不会对结果有什么影响。 )

xx.xx=x*2^(n-1 ) x *2^ (n-2 ) . x*2^1 x*2^0

这个数是2^m次方

xx.xx/2^m

=(x*2^(n-1 ) x *2^ (n-2 ) ) . x*2^1 x*2^0)/2^m

=x*2^(n-1-m )=x*2^(n-1-m )…x*2^(0-m ) …x*2^(0-m )…x*2^(0-m ) () ) ) )

=x*2^0(m-m )=x*2^0,这是得到的二进制数的最低位,其后的项x*2^ ) m-1-m )=x*2^0)0-m )。

过剩

这里相当于将xx.xx向右偏移m位,出去的m位是剩余的。 (因为前面的东西能整除,后面的东西不能整除是多余的。) )。

我们知道:

二进制2^m -1共有m 1位,除最高m 1位为0外,其馀m位均为1

二进制和一的操作不会改变原始数量

那么,如下。

xx.xx(2^m-1 )相当于从中检索xx.xx的低m位的二进制数,即上述向右移动的m位,即馀数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。