java中的位运算符
来源:互联网 发布:好听音乐网络歌曲 编辑:程序博客网 时间:2024/05/19 05:38
java中的位运算符
- java中的位运算符
- 概述
- 分类
- 说明
- 左移
- 原理
- 被除数是负数的时候
- 右移
- 原理
- 被除数是负数的时候
- 无符号右移
- 当数是负数的时候
- 位与
- 位或
- 位异或
- 位非
- 左移
- 衍生运算符
- 概述
概述
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型
分类
左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符
说明
左移<<
public static void main(String[] args) { int a= 10; System.out.println(a<<3);//80 }
实质就是a乘2的3次幂;
原理
把10转换成二进制:
00000000 00000000 00000000 00001010
然后整体向左移动三位,不足位用0补齐:
00000000 00000000 00000000 01010000
结果就是80
被除数是负数的时候
System.out.println(-10<<3);//-80
右移>>
public static void main(String[] args) { int a= 10; System.out.println(a>>3);//1 }
实质就是10除以2的3次幂
原理
把10转换成二进制:
00000000 00000000 00000000 00001010
然后把数据整体向右移动三位,不足位用0补齐:
00000000 00000000 00000000 00000001
结果就是1
被除数是负数的时候
System.out.println(-10>>3);//-2
把-10的补码求出来:
原码:1 0000000 00000000 00000000 00001010
反码:1 1111111 11111111 11111111 11110101
补码:1 1111111 11111111 11111111 11110110
操作: 1 1111111 11111111 11111111 11111110 注意此处用1补位
反码:1 1111111 11111111 11111111 11111101
原码:1 0000000 00000000 00000000 00000010 就是-2
无符号右移>>>
没有无符号左移
System.out.println(10>>>3);
当要操作的数是正数的时候和普通右移结果相同
当数是负数的时候
System.out.println(-10>>3); //-2 System.out.println(-10>>>3); //536870910
把-10的补码求出来:
原码:1 0000000 00000000 00000000 00001010
反码:1 1111111 11111111 11111111 11110101
补码:1 1111111 11111111 11111111 11110110
操作:0 0011111 11111111 11111111 11111110 注意此处用0补位
正数的原反补相同结果就是536870910
正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位(自然而然的,就由负数变成了正数了)
位与&
System.out.println(10&5);//0
把10转换成二进制:
00000000 00000000 00000000 00001010
把5转换成二进制:
00000000 00000000 00000000 00000101
只有对应的两位都是1的时候才是1,否则就是0,那么结果就是0
位或|
System.out.println(10|5);//15
把10转换成二进制:
00000000 00000000 00000000 00001010
把5转换成二进制:
00000000 00000000 00000000 00000101
只有对应的两位某一个是1的时候结果就是1,否则就是0,那么结果就是15
位异或^
System.out.println(10^5);//15
把10转换成二进制:
00000000 00000000 00000000 00001010
把5转换成二进制:
00000000 00000000 00000000 00000101
当对应的两位不相等的时候是1,相同的时候是0,结果还是15
位非
System.out.println(~10 );//-11
把10转换成二进制:
00000000 00000000 00000000 00001010
求位非运算:
1 1111111 11111111 11111111 11110101
求反码:
1 1111111 11111111 11111111 11110100
求原码:
1 0000000 00000000 00000000 00001011 就是-11
衍生运算符
&= 按位与赋值
|= 按位或赋值
^= 按位非赋值
>>= 右移赋值
>>>= 无符号右移赋值
<<= 赋值左移
更多精彩好玩的文章请参见:天意的个人博客没有广告(⊙o⊙)哦
- Java 中的位运算符
- JAVA中的位运算符
- Java中的位运算符
- java中的位运算符
- java中的位运算符
- Java中的位运算符
- java中的位运算符
- Java中的位运算符
- java中的位运算符
- Java中的位运算符、移位运算
- Java中的位运算符、移位运算
- Java 中的位运算
- JAVA 中的位运算
- Java 中的位运算
- java中的位运算
- Java 中的位运算
- Java 中的位运算
- JAVA中的位运算
- ping: unknown host www.baidu.com解决
- JAVA中通过JNI调用C程序实例教程
- 7.13 BHDU 3671 Boonie and Clyde
- 指针铁律1:指针也是一种数据类型
- IT行业岗位以及发展方向(职业规划迷茫的欢迎查看)
- java中的位运算符
- MyEclipse2016CI6破解方法
- 《浪潮之巅》 第三章 “水果”公司的复兴--乔布斯和苹果公司
- 干净卸载 Cloudera CDH 5
- Android系统架构
- 3年后的自己——技术(6个月,至2017.04)
- C#性能优化总结
- 华为OJ——表示数字
- cookie 和session 的区别