首页 > 编程知识 正文

java位运算符的运算规则,java位运算代替乘除法

时间:2023-05-04 04:38:15 阅读:179439 作者:4146

一.基础知识1.要了解java中的位运算,要先看看每种类型占多少位,见下图

2.要知道10进制的数字怎么转为2进制的010101组合的,只需要知道为1的位序号即可。从高位往低位去寻找。

已知整数a,为2**na,且为2**n * 2a时,最高位为n (从第0开始计数)。 然后,对a-2**n的馀数进行相同的运算,直到最后剩下1或0 )。 如果是1,则第0个比特为1,如果是0,则第0个比特为0。

例如:由于99=1*2**6 1*2**5 1*2**1 1* 2**0,所以99的数字用二进制表示,得到0、1、5、6位为1,其他为0

用java的写法计算

publicstaticintgetbitnum (intnum ) if ) num==0) { return -1; (if ) num==1) {System.out.println ) ) 1的位置为)0); 返回0; (/)通过对数变换底公式logx(y )=loge(y ) y )/loge (x )计算intbnum=(int ) (math.log ) num )/Math.log(2) (2) System.out.println ('为1的位置为' bNum ); getbitnum((int ) ) bNum (math.pow ) ) 2,bNum ) )返回bnum; }可以看到} 3.还需要知道运算符的优先级在数学运算符(*/ - )之后有移位运算符

优先级运算符分类联接顺序运算符高

到了

很低

分隔符左连接. [] (; 一元运算符右结合! -- - ~算术运算符

移位运算符

左联接*/% -关系运算符左联接==instanceof(Java特有)==!=逻辑运算符左连接! || ~ | ^三目运算符右结合布尔表达式? 表达式1:表达式2赋值运算符右键=*=/==-=====*=|=2,位运算1.位运算按照优先级排列如下

非() ) 3354左移)、右移)和) —— )、与——的异或(^ ) ——或(|) ) )。

2.位运算

注意:

虽然数据类型所占的字节数有限,但是由于偏移的大小是任意的,所以在偏移之后可能超出该数据类型的表示范围,存在这种规定。

对于int数据类型,如果位移位数大于32位,则首先针对32位来模拟位移位数。 否则,即使位移超过总位数也没有意义。

长型,位移位数大于64位时,首先将位移位数模制成64位,不超过64位时不需要模制成位数。

对于byte、char和short,规则首先扩展为32位,然后根据int类型进行处理

a.非(~)运算

各位的值1变为0,0变为1,

例1 :十进制99,非(() )运算后为100。 如下图计算,上位1为负时,为(99=-1*2**7)1**2**3)1*2**2=-100。

例2:10进制- 20,1变0,0变1得,~-20=1*2**4 1*2**1 1*2**0=19;

根据以上两个例子,~99=-99 - 1; 得到(-20=-)-20 )-1,对数a相反,-a=((~a ) 1;

b.左移()

在当前类型的数值范围中,没有向左移动1位,所以得到的数值变为2倍,移动n位后变为a*2**n

c.右移()

如下图所示,991=49,993=12,向右移动几个a位,变为(int ) ) a/2**n )

d.无符号右移()

无符号右移是指无论正数还是负数都在高位补0。 如果是正数,则规则与带符号右移()相同。 如果是负数,请看下图。

e.与运算()

符合的位置都是1,结果才是1,否则为0,即10=0,01=0, 0=0; 11=1。

例如:判断数字的奇偶性,如果a1=1,则a为奇数; a1=0时,a为偶数

f.或运算(|)

用两个数进行或(|)运算,如果对应位置有一个数字的值,则为1,否则为0,即1|1=1,1|0=1,0|1=1,0|0=0;

例如:在传输了物联网等数据后,接收方可能需要根据某种规则进行操作后再进行分析。 如果将接收到的数字a的第n位设为1,则为:

b=a|(1n ); (a把数字的第n位定为1。

g.异或运算(^)

如果相应的比特相同,则为0,否则为1,即0 ^0=0,1 ^1=0; 0 ^1=1,1 ^0=1;

例1:0异或的任意数值为任意数,a ^ 0=a;

示例2:交换两个变量x、y的值而不使用第一个变量。

x ^=y; y ^=x; x ^=y; 如下图所示,三种颜色分别表示三次异或(^ )运算的过程

好的,今天的共享到此为止。 如果有错误的地方请指出来。

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