专业的JAVA编程教程与资源

网站首页 > java教程 正文

位运算基础知识(Java篇)(java 位与运算)

temp10 2024-10-18 13:46:39 java教程 15 ℃ 0 评论

主要应用场景

1.判断int型变量a是奇数还是偶数

位运算基础知识(Java篇)(java 位与运算)

b&1 = 0 偶数

b&1 = 1 奇数

2.求平均值,比如有两个int类型变量x、y,首先要求x+y的和,再除以2,但是有可能x+y的结果会超过int的最大表示范围,所以位运算就派上用场啦。

(x&y)+((x^y)>>1);

3.对于一个大于0的整数,判断它是不是2的几次方

((x&(x-1))==0)&&(x!=0);

4.比如有两个int类型变量x、y,要求两者数字交换,位运算的实现方法:性能绝对高效

x ^= y; 
y ^= x; 
x ^= y;

5.求绝对值

int abs( int x ) 
{ 
 int y ; 
 y = x >> 31 ; 
 return (x^y)-y ; //or: (x+y)^y 
}

6.取模运算,采用位运算实现

a % (2^n) 等价于 a & (2^n - 1)

7.乘法运算 采用位运算实现

a * (2^n) 等价于 a << n

8.除法运算转化成位运算

a / (2^n) 等价于 a>> n

9.求相反数

(~x+1)

10.其他

a % 2 等价于 a & 1

位运算

与运算 &

与运算 & 规则是两个与运算的数据转为二进制后进行运算:同位比较都为1时才为1.

或运算 |

与运算 | 规则是两个与运算的数据转为二进制后进行运算:同位比较一个为1,则为1.

异或运算 ^

异或运算 ^ 规则是两个与运算的数据转为二进制后进行运算:同位比较数不同为1.

取反运算(非运算) ~

取反运算 ~ 规则是将一个数据转为二进制后进行运算:把数据转为不同的.

移位运算符

移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。

a.<<左移运算符

将运算符左边的对象向左移动运算符右边指定的位数(在低位补0).

b.>>"有符号"右移运算符

将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.

c.>>>"无符号"右移运算符

将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0.

示例:

System.out.println(Integer.toBinaryString(6297)); 
System.out.println(Integer.toBinaryString(-6297)); 
System.out.println(Integer.toBinaryString(6297>>5)); 
System.out.println(Integer.toBinaryString(-6297>>5)); 
System.out.println(Integer.toBinaryString(6297>>>5)); 
System.out.println(Integer.toBinaryString(-6297>>>5)); 
System.out.println(Integer.toBinaryString(6297<<5)); 
System.out.println(Integer.toBinaryString(-6297<<5)); 

运行结果:

1100010011001
11111111111111111110011101100111
11000100
11111111111111111111111100111011
11000100
111111111111111111100111011
110001001100100000
11111111111111001110110011100000

注:x<<y 相当于 x*2y ;x>>y相当于x/2y

从计算速度上讲,移位运算要比算术运算快。

如果x是负数,那么x>>>3没有什么算术意义,只有逻辑意义。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表