Java位运算
2015-08-31 10:33
176 查看
/* 位运算
* java使用补码来表示2进制数,最高位为符号位,正数为0,负数为1,补码规定:
* 整数,最高位是0,其余是本身,如 +42的补 码 为 00101010
* 负数,最高位是1,将其余的决定值按位取反,最后+1,即为负数的补码;
* 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=11010110 )
********
*逻辑运算*
********
a&b 与[真真为真,真假为假]
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0000
System.out.println(1 & 2);
结果为0
a|b 或[假假为假,其余全真]
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(1 | 2);
结果为3
~a 非[真则假,假则真]
0000 0000 0000 0000 0000 0000 0000 0001
=
1111 1111 1111 1111 1111 1111 1111 1110
System.out.println(~1);
结果为:-2
a^b 异或: [相同为假,不同为真](任何一个数异或它自己为0,其他数再来异或它,等于其他数)
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(1^2);
结果为 3
********
*移位运算*
********
a>>b 有符号右移位;将a右移b位;若正数,高位补0,负数,高位补1
0000 0000 0000 0000 0000 0000 0000 0011
>>1
=
0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(3>>1);
结果为1,结果与 3 / 2的1次幂相同
a<<b 有符号左移位;将a左移b位,若正数,高位补0,负数,高位补1
0000 0000 0000 0000 0000 0000 0000 0011
<<2
0000 0000 0000 0000 0000 0000 0000 1100
System.out.println(3<<2);
结果为12,与3*2的2次幂相同
a>>>b 无符号右移位;将a左移b位,不论正负,高位均补0
0000 0000 0000 0000 0000 0000 0000 0011
>>1
=
0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(3>>>1);
结果为1,与3/2的1次幂相同
*/
System.out.println(3>>>1);
System.out.println();
* java使用补码来表示2进制数,最高位为符号位,正数为0,负数为1,补码规定:
* 整数,最高位是0,其余是本身,如 +42的补 码 为 00101010
* 负数,最高位是1,将其余的决定值按位取反,最后+1,即为负数的补码;
* 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=11010110 )
********
*逻辑运算*
********
a&b 与[真真为真,真假为假]
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0000
System.out.println(1 & 2);
结果为0
a|b 或[假假为假,其余全真]
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(1 | 2);
结果为3
~a 非[真则假,假则真]
0000 0000 0000 0000 0000 0000 0000 0001
=
1111 1111 1111 1111 1111 1111 1111 1110
System.out.println(~1);
结果为:-2
a^b 异或: [相同为假,不同为真](任何一个数异或它自己为0,其他数再来异或它,等于其他数)
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
=
0000 0000 0000 0000 0000 0000 0000 0011
System.out.println(1^2);
结果为 3
********
*移位运算*
********
a>>b 有符号右移位;将a右移b位;若正数,高位补0,负数,高位补1
0000 0000 0000 0000 0000 0000 0000 0011
>>1
=
0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(3>>1);
结果为1,结果与 3 / 2的1次幂相同
a<<b 有符号左移位;将a左移b位,若正数,高位补0,负数,高位补1
0000 0000 0000 0000 0000 0000 0000 0011
<<2
0000 0000 0000 0000 0000 0000 0000 1100
System.out.println(3<<2);
结果为12,与3*2的2次幂相同
a>>>b 无符号右移位;将a左移b位,不论正负,高位均补0
0000 0000 0000 0000 0000 0000 0000 0011
>>1
=
0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(3>>>1);
结果为1,与3/2的1次幂相同
*/
System.out.println(3>>>1);
System.out.println();
相关文章推荐
- 【spring框架】(二)控制反转(IOC)容器
- eclipse中类结构中各个小图标的含义
- JAVA基础10--行为型模式(责任链模式 迭代器模式 中介者模式 命令模式 策略模式)
- Java Spring IOC用法
- Spring REST Hello World XML Example
- Java时间工具类DateUtils(把日期时间转换成xx秒前、xx分钟前、xx小时前...)
- JVM java虚拟机的学习(一)
- 修改Eclipse的内存值,防止程序无响应
- spring多个定时任务quartz配置
- 【java】for循环语句的3种遍历方法
- 【java】java各种删除指定文件夹或文件方法详解
- Java版本的在指定目录及子目录下创建指定的文件
- SpringMVC框架介绍
- 【java】getAbsolutePath()方法详解
- 【java】File类的详解使用方法
- 数据源的配置
- DecimalFormat用法
- 【Java】Java实现多线程下载
- 使用eclipse调试SylixOS应用
- 【Java】Java单例模式的七种写法 (全)