Java位运算
来源:互联网 发布:淘宝店铺升级咨询电话 编辑:程序博客网 时间:2024/06/07 02:44
Java的位运算(bitwise operators)直接对整数类型的位进行操作:
public static void main(String[] args){System.out.println("byte size:"+Byte.SIZE);System.out.println("byte min:"+Byte.MIN_VALUE);System.out.println("byte max:"+Byte.MAX_VALUE);System.out.println("char size:"+Character.SIZE);System.out.println("char min:"+Integer.valueOf(Character.MIN_VALUE));System.out.println("char max:"+Integer.valueOf(Character.MAX_VALUE));System.out.println("short size:"+Short.SIZE);System.out.println("short min:"+Short.MIN_VALUE);System.out.println("short max:"+Short.MAX_VALUE);System.out.println("int size:"+Integer.SIZE);System.out.println("int min:"+Integer.MIN_VALUE);System.out.println("int max:"+Integer.MAX_VALUE);System.out.println("float size:"+Float.SIZE);System.out.println("float min:"+Float.MIN_VALUE);System.out.println("float max:"+Float.MAX_VALUE);System.out.println("long size:"+Long.SIZE);System.out.println("long min:"+Long.MIN_VALUE);System.out.println("long max:"+Long.MAX_VALUE);System.out.println("double size:"+Double.SIZE);System.out.println("double min:"+Double.MIN_VALUE);System.out.println("double max:"+Double.MAX_VALUE);}
结果为:
byte size:8byte min:-128byte max:127char size:16char min:0char max:65535short size:16short min:-32768short max:32767int size:32int min:-2147483648int max:2147483647float size:32float min:1.4E-45float max:3.4028235E38long size:64long min:-9223372036854775808long max:9223372036854775807double size:64double min:4.9E-324double max:1.7976931348623157E308
因为float和double为浮点类型,
故可进行位运算的数据类型包括byte、char、short、int和long
数据类型
所占位数
最小值
最大值
byte
8
1000 0000=-27=-128
01111 1111=27-1=127
char
16(char无符号位)
0000 0000 0000 0000=0
1111 1111 1111 1111=65535
short
16
-215=-32768
215-1=32767
int
32
-231=-2147483648
231-1=2147483647
long
64
-263=-9223372036854775808
263-1=9223372036854775807
public static void main(String[] args){System.out.println(10<<32);System.out.println(10>>32);System.out.println(10>>>32);System.out.println(-10<<32);System.out.println(-10>>32);System.out.println(-10>>>32);}
结果为:
101010-10-10-10
int类型的数据<<32,>>32,>>>32都为本身
public static void main(String[] args){byte b = 127;System.out.println(b<<8);System.out.println(b<<32);char c = 65535;System.out.println(c<<12);System.out.println(c<<16);System.out.println(c<<32);short s = (short)32767;System.out.println(s<<16);System.out.println(s<<32);int i = 2147483647;System.out.println(i<<32);long l = 20l;System.out.println(l<<60);System.out.println(l<<64);}
结果为:
32512127268431360-65536655352147418112327672147483647461168601842738790420
说明了byte,char,short在位移运算之前都会转换成int类型,然后再进行位移运算
位运算符具体如下表:
运算符
说明
<<
左移位,在低位处补0
>>
右移位,若为正数则高位补0,若为负数则高位补1
>>>
无符号右移位,无论正负都在高位补0
&
按位与,对应位都为1时该位为1,否则0
|
按位或,对应位都为0时该位为0,否则1
~
按位非
^
按位异或,对应位相等该位为0,不等为1。
<<=
左移位赋值。
>>=
右移位赋值。
>>>=
无符号右移位赋值。
&=
按位与赋值。
|=
按位或赋值。
^=
按位异或赋值。
左位移(<<):
程序:
public static void main(String[] args) {System.out.println("5<<3="+(5<<3));}
运行结果:
5<<3=40
计算过程:
0000 0000 0000 0000 0000 0000 0000 0101---------------------------------------0000 0000 0000 0000 0000 0000 0010 1000=40
右位移(>>):
程序:
public static void main(String[] args) {System.out.println("5>>1="+(5>>1));System.out.println("-5>>1="+(-5>>1));}
运行结果:
5>>1=2-5>>1=-3
计算过程:
0000 0000 0000 0000 0000 0000 0000 0101---------------------------------------0000 0000 0000 0000 0000 0000 0000 0010=21111 1111 1111 1111 1111 1111 1111 1011(-5:|5|的反码+1)---------------------------------------1111 1111 1111 1111 1111 1111 1111 1101=-3
右位移(>>>):
程序:
public static void main(String[] args) {System.out.println("5>>>1="+(5>>>1));System.out.println("-5>>>1="+(-5>>>1));}
运行结果:
5>>>1=2-5>>>1=2147483645
计算过程:
0000 0000 0000 0000 0000 0000 0000 0101---------------------------------------0000 0000 0000 0000 0000 0000 0000 0010=21111 1111 1111 1111 1111 1111 1111 1011---------------------------------------0111 1111 1111 1111 1111 1111 1111 1101=2147483645
按位与(&):
程序:
public static void main(String[] args) {System.out.println("5&1="+(5&1));System.out.println("5&1="+(5&(-1)));}
运行结果:
5&1=15&1=5
计算过程:
0000 0000 0000 0000 0000 0000 0000 01010000 0000 0000 0000 0000 0000 0000 0001---------------------------------------0000 0000 0000 0000 0000 0000 0000 0001=10000 0000 0000 0000 0000 0000 0000 01011111 1111 1111 1111 1111 1111 1111 1111---------------------------------------0000 0000 0000 0000 0000 0000 0000 0101=5
按位或(|):
程序:
public static void main(String[] args) {System.out.println("5|1="+(5|1));System.out.println("5|(-1)="+(5|(-1)));}
运行结果:
5|1=55|(-1)=-1
计算过程:
0000 0000 0000 0000 0000 0000 0000 01010000 0000 0000 0000 0000 0000 0000 0001---------------------------------------0000 0000 0000 0000 0000 0000 0000 0101=50000 0000 0000 0000 0000 0000 0000 01011111 1111 1111 1111 1111 1111 1111 1111---------------------------------------1111 1111 1111 1111 1111 1111 1111 1111=-1
按位非(~):
程序:
public static void main(String[] args) {System.out.println("~5="+(~5));System.out.println("~(-3)="+(~(-3)));}
运行结果:
~5=-6~(-3)=2
计算过程:
0000 0000 0000 0000 0000 0000 0000 0101---------------------------------------1111 1111 1111 1111 1111 1111 1111 1010=-61111 1111 1111 1111 1111 1111 1111 1101---------------------------------------0000 0000 0000 0000 0000 0000 0000 0010=2
左位移赋值(<<=):
程序:
public static void main(String[] args) {int a = 5;a >>= 1;System.out.println(a);}
运行结果:
2
计算过程:
0000 0000 0000 0000 0000 0000 0000 0101---------------------------------------0000 0000 0000 0000 0000 0000 0000 0010=2
先计算,后赋值
注:
所有代码在jdk1.5上调试通过
- Java 中的位运算
- JAVA 中的位运算
- Java 中的位运算
- Java位运算符
- 转帖 java位运算
- Java 位运算符
- Java 位运算符
- java 位运算
- Java 位运算符
- JAVA位运算
- Java 位运算符
- Java的位运算
- Java 位运算符
- Java 位运算
- java中的位运算
- java位运算
- java位运算例子
- Java 位运算符
- Android中的传感器
- python学习变量
- bean:define标签
- ibatis+spring+struts整合应用实例
- OgreOde——遍历场景中所有的实体(Entity)
- Java位运算
- [WARNING] 'parent.relativePath' of POM **points at ** instead of **, please verify your project stru
- cocos2d-x 开发中的小问题 在xcode4环境下
- JavaSE第六十九讲:Java Annotation详解
- 基于i.MX536的新一代国家电网输电线智能监测设备
- 函数指针地址转换问题的解决
- pthread_join的应用
- spring security3 自定义 remberMeService(cookie)
- Django项目7