网站首页 > java教程 正文
主要应用场景
1.判断int型变量a是奇数还是偶数
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没有什么算术意义,只有逻辑意义。
猜你喜欢
- 2024-10-18 Java 中的移位运算符(Shift Operator)
- 2024-10-18 「每日分享」把Map中的hash()分析的最透彻的文章
- 2024-10-18 从bitmap到布隆过滤器,再到高并发缓存设计策略
- 2024-10-18 Java基础入门(运算符)(java运算符的含义)
- 2024-10-18 Day03-Java运算(三年级混合运算练习题)
- 2024-10-18 浅谈java中的数学运算(java的数学公式有哪些)
- 2024-10-18 好程序员Java学习路线分享Java中的位移运算
- 2024-10-18 全网分析Map中hash方法最透彻的一篇文章
- 2024-10-18 为什么Java String哈希乘数为31?(java中string是什么数据类型)
- 2024-10-18 Java精确运算高位数数字(java计算精度问题)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)