Java基础——位运算符
来源:互联网 发布:诺基亚s40软件下载 编辑:程序博客网 时间:2024/05/17 17:17
Java基础——位运算符
一、Java中的位运算符
Java语言的位运算符主要的操作数是整数类型(字节:byte、字符:char、短整型:short、整型:int、长整型:long)。所有的整数类型(除了char 类型之外)都是有符号的整数,即,有正数也有负数。在Java语言中,整数类型在计算机内部是以二进制补码的形式进行表示和存储的,在补 码 表 示 中 ,最高 位 为 符号 位 ,非负整数的符号位为0,负数的符号位为1,运算结果为整数。位运算符主要是满足编程中的特殊要求,例如,测试设备、与硬件通讯等高级编程。
用法按位与&op1 & op2按位或|op1 | op2按位取反~~op1按位异或^op1 ^ op2按位左移<<op1 << op2按位右移>>op1 >> op2无符号按位右移>>>op1 >>> op2
二、整数的补码
非负整数的补码与通常所表示的二进制数相同,例:10的补码
00000000000000000000000000001010负整数的补码计算方法:1.先计算出负整数的相反数的二进制补码,用0填充其高位,直到填满其所占的内存位数;
00000000000000000000000000001010负整数的补码计算方法:1.先计算出负整数的相反数的二进制补码,用0填充其高位,直到填满其所占的内存位数;
2.按位取反;例:10的补码按位取反
11111111111111111111111111110101 3.最低位加1,得负整数补码。例,-10的补码
11111111111111111111111111110110
三、按位运算
(一)按位与(&)
两个数的二进制补码在内存位数相同的位置上同为1时为1,其他都为0。例3 & 6:
3的二进制补码:0000000000000000000000000000000116的二进制补码:000000000000000000000000000001103 & 6的二进制补码:00000000000000000000000000000010实现代码:/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = 3; //属性赋值int y = 6;System.out.println(x & y); //按位与}}
运行结果为:2
(二)按位或(|)两个数的二进制补码在内存位数相同的位置上同为0时为0,其他都为1。例3 | 6:
3 | 6的二进制补码:
00000000000000000000000000000111实现代码:
/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = 3; //属性赋值int y = 6;System.out.println(x | y); //按位或}}
运行结果为:7
(三)按位异或(^)两个数的二进制补码在内存位数相同的位置上相同为0,不同为1。例3 | 6:
3 ^ 6的二进制补码:
00000000000000000000000000000101实现代码:
00000000000000000000000000000101实现代码:
/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = 3; //属性赋值int y = 6;System.out.println(x ^ y); //按位异或}}
运行结果:5(四)按位右移(>>)
按位右移(>>)运算是将第一个操作数表示成二进制补码形式,然后将二进制补码为序列 右移第二个操作数指定的位数。右端移除的地位将自动被舍弃,空出的位置以符号位填充,如果是非负整数则使用0填充,是负整数使用1填充。例,3 >> 2:
3的二进制补码:
000000000000000000000000000000113 >> 2的二进制补码:
00000000000000000000000000000000实现代码:
/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = -3; //属性赋值int y = 2;System.out.println(x >> y); //按位右移}}
运行结果:0(五)按位左移(<<)
按位左移(<<)运算是将第一个操作数的二进制补码为序列依次左移第二个操作数指定的位数,舍弃移除的高位,空出低位用0补充。
按位左移(<<)运算是将第一个操作数的二进制补码为序列依次左移第二个操作数指定的位数,舍弃移除的高位,空出低位用0补充。
例,3 << 2的二进制补码:
00000000000000000000000000001100实现代码:
/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = -3; //属性赋值int y = 2;System.out.println(x << y); //按位左移}}
运行结果:12(六)无符号按位右移(>>>)
无符号按位右移(>>>)运算是将第一个操作数表示成二进制补码形式,然后将二进制补码为序列 右移第二个操作数指定的位数。右端移除的地位将自动被舍弃,空出的位置以0填充。例-3 >>>2:
无符号按位右移(>>>)运算是将第一个操作数表示成二进制补码形式,然后将二进制补码为序列 右移第二个操作数指定的位数。右端移除的地位将自动被舍弃,空出的位置以0填充。例-3 >>>2:
3的二进制补码:
00000000000000000000000000000011~3的二进制补码:
11111111111111111111111111111100-3的二进制补码:
11111111111111111111111111111101-3 >>> 2的二进制补码:
00111111111111111111111111111111实现代码:
/** * 测试位运算符 * @author javamsj * @version 1.0 2017-06-29 * @since J2SE 1.8 */public class Operator {public static void main(String[] args) {int x = -3; //属性赋值int y = 2;System.out.println(x >>> y); //无符号按位右移}}
运行结果:1073741823
3的二进制补码:
000000000000000000000000000000112的二进制补码:
000000000000000000000000000000103 ^ 2的二进制补码,结果为1
00000000000000000000000000000001(3 ^ 2) ^ 2的二进制补码,结果为3
00000000000000000000000000000011(3 ^ 2) ^ 3的二进制补码,结果为2
00000000000000000000000000000010
参考文献:
李兴华. 《Java开发实战经典》. 北京:清华大学出版社出版,2009
雍俊海. 《Java程序设计教程(第3版)》. 北京:清华大学出版社出版,2014
雍俊海. 《Java程序设计教程(第3版)》. 北京:清华大学出版社出版,2014
本文由作者整理而得,如需转载请注明。
由于本人水平有限,如有错误请多多谅解,大家可以留言本文的存在错误信息。谢谢大家阅读。
阅读全文
0 0
- Java基础——位运算符
- 黑马程序员--java基础——位运算符
- Java基础03——位运算符
- Java基础语法(五)—位运算符
- java基础 位运算符 >> <<
- java 位运算基础
- Java基础: 位运算 << >> >>>
- Java基础 位运算
- 基础—位运算例
- 八:Java语言基础组成——运算符之位运算符和三元运算符
- java基础之,位运算符>>
- java基础之位运算符
- 位运算符--Java基础013
- Java基础-位运算符回顾
- java基础_位运算符
- java基础之位运算符
- 24.java语言基础-位运算符
- Java基础之位运算符
- ListView无数据时显示页面
- 异步和多线程
- SQLServer中跨服务器跨数据库之间的数据操作
- Redis作者谈Redis应用场景
- NAT技术与代理服务器调研
- Java基础——位运算符
- pyenv+virtualenv的安装与使用
- 今日小程序推荐:初礼壁纸
- Vue vs React: Javascript 框架之战 #转载
- liunx 开启和关闭端口
- bzoj2424: [HAOI2010]订货
- caffe mnist 训练和测试记录
- 用idea建maven项目搭建mybatis框架
- HTTP常见错误代码