文档章节

java学习笔记之位运算

lizhijun92
 lizhijun92
发布于 2016/04/10 13:26
字数 1428
阅读 33
收藏 0

 java的七种位运算符

(1)  & 按位与运算符

            按位与运算是将参与运算的两数各对应的二进位进行逻辑与运算。运算规则:只有对应的两个二进位均为1时,结果位才为1 ,否则为0。例如,int型常量3和14进行位与运算的运算过程如下:

                3=0b0011,14=0b1110。则3&14 = 0b0011&0b1110 = 0b0010 = 2

代码如下:

public class Test{
 public static void main(String[] args) {
 
  //java中int占4字节,即32位
 
  int a=3;        //3的二进制表示: 0b00000000000000000000000000000011

  int b=14;       //14的二进制表示:0b00000000000000000000000000001110

     //输出结果为2,对应的二进制表示:0b00000000000000000000000000000010

  int c=a&b;

  System.out.println("输出的结果:"+c);
 }
 
}

             对于负数,按其补码进行运算(求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1)。例如:int型常量-4和14进行位与运算的运算过程如下:

            -4=0b11111111111111111111111111111100 ,7 =0b00000000000000000000000000000111。则

                    -4&7 = 0b11111111111111111111111111111100 &0b00000000000000000000000000000111=0b00000000000000000000000000000100 = 4           

代码如下:

public class Test{
 public static void main(String[] args) {

  //java中int占4字节,即32位

  int a=-4;      //-4的二进制表示: 0b11111111111111111111111111111100 

  int b=7;         //7的二进制表示:0b00000000000000000000000000000111

    //输出结果为4,对应的二进制表示:0b00000000000000000000000000000100 

  int c=a&b;

  System.out.println("输出的结果:"+c);

 }

}

                                                                                              

(2)  | 按位或运算符

            按位或运算是将参与运算的两数各对应的二进位进行逻辑或运算。运算规则:只要对应的二个二进位有一个为1时,结果位就为1。例如,int型常量3和14进行位或运算的运算过程如下:

                3=0b0011,14=0b1110。则3|14 = 0b0011|0b1110 = 0b1111=15

代码如下:

public class Test{ 
public static void main(String[] args) {
   //java中int占4字节,即32位
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011
 
   int b=14;       //14的二进制表示:0b00000000000000000000000000001110
 
      //输出结果为15,对应的二进制表示:0b00000000000000000000000000001111
 
   int c=a|b;
 
   System.out.println("输出的结果:"+c);
 
  }
 
}


(3)  ^按位异或运算符

            按位异或运算是参与运算的两数各对应的二进位相异或。运算规则:当两对应的二进位相不同时,结果为1,相同时为0。例如,int型常量3和14进行位异或运算的运算过程如下:

                 3=0b0011,14=0b1110。则3^14 = 0b0011^0b1110 = 0b1101=13

代码如下:

public class Test{
 public static void main(String[] args) {
 
   //java中int占4字节,即32位
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011
 
   int b=14;       //14的二进制表示:0b00000000000000000000000000001110
 
      //输出结果为13,对应的二进制表示:0b00000000000000000000000000001101
 
   int c=a^b;
 
   System.out.println("输出的结果:"+c);
  }
 
}


(4)  ~求反运算符

            求反运算是对参与运算的数的各二进位按位求反。运算规则:各二进制位0变成1,1变成0。例如,int型常量3求反运算的运算过程如下:

                    3=0b00000000000000000000000000000011,~3=~0b00000000000000000000000000000011=0b11111111111111111111111111111100=-4

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011 
 
      //输出结果为-4,对应的二进制表示:0b11111111111111111111111111111100 
 
   int c=~a; 
 
   System.out.println("输出的结果:"+c);
 
  } 
 
}


(5)  <<左移运算符

            左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。运算规则:“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0左移n位就是乘以2的n次方)。例如,int型常量3左移1位的运算过程如下:

              3=0b00000000000000000000000000000011,3<<1=0b00000000000000000000000000000011<<1 = 0b00000000000000000000000000000110 = 6 =3X2^1

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011 
 
      //输出结果为6,对应的二进制表示:0b00000000000000000000000000000110 
 
   int c=a<<1; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}




(6)  >>(有符号)右移运算符

             位右移运算(有符号)的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。运算规则:把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。(移n位就是除以2的n次方)例如,int型常量-4右移2位的运算过程如下:

-4=0b11111111111111111111111111111100,-4>>2=0b11111111111111111111111111111100>>2=0b11111111111111111111111111111111 = -1 = -4/2^2

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=-4;        //-4的二进制表示: 0b11111111111111111111111111111100  
 
      //输出结果为-1,对应的二进制表示:0b11111111111111111111111111111111 
 
   int c=a>>2; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}

(7)  >>>(无符号)右移运算符

                同”>>“(有符号)一样其实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。运算规则:把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。右移之后的空位用0位补充。例如,int型常量-4右移2位的运算过程如下:

-4=0b11111111111111111111111111111100,-4>>>2=0b11111111111111111111111111111100>>>2=0b00111111111111111111111111111111 = 1073741823

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=-4;        //-4的二进制表示: 0b11111111111111111111111111111100  
 
   //输出结果为1073741823,对应的二进制表示:0b00111111111111111111111111111111 
 
   int c=a>>>2; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}














© 著作权归作者所有

lizhijun92
粉丝 0
博文 20
码字总数 8411
作品 0
其它
程序员
私信 提问
读《深入理解Java虚拟机》- 笔记08

《深入理解Java虚拟机:JVM高级特性与最佳实践》第2版 第10章 早期(编译期)优化 59. 语法糖 在计算机语言中添加某种语法,对语言的功能没有影响,但是方便开发人员使用。 泛型是一种语法糖...

阿历Ali
2018/08/18
0
0
Flutter学习笔记(5)--Dart运算符

如需转载,请注明出处:Flutter学习笔记(5)--Dart运算符 先给出一个Dart运算符表,接下来在逐个解释和使用。如下: 描述 运算符 一元后缀 expr++  expr--  ()  []  .  ?. 一元前...

CurtisWgh
07/11
0
0
给大家分享一个JAVA技术大牛的课程笔记

目前,Java语言已经广泛应用于生活中的各个领域,无论是网络编程还是数据库编程,甚至是web开发都有Java语言的身影 很多小伙伴想学习java却布置从何学起,现在给大家分享一个JAVA大神课程笔记...

dadaxiaoxiao
2015/12/31
396
1
111 多线程JUC包下代码分析

Java多线程系列目录(共43篇) AtomicLongFieldUpdater:通过反射+CAS实现对传入对象的指定long字段实现类似AtomicLong的操作 http://www.cnblogs.com/skywang12345/p/javathreadscategory.ht...

素雷
2017/10/31
34
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

医疗在线客服咨询系统有哪些特点?

随着中国互联网网站的的快速发展,至今医疗行业已经拥有了独立的的运营网站,其中最具特色的便属于医疗在线客服咨询系统,医疗在线客服咨询系统为每个访问网站的患者提供即时的网络在线客服服...

唯喏
今天
10
0
skywalking(容器部署)

skywalking(容器部署) 标签(空格分隔): APM [toc] 1. Elasticsearch SkywalkingElasticsearch 5.X(部分功能报错、拓扑图不显示) Skywalking需要Elasticsearch 6.X docker network create......

JUKE
今天
8
0
解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述 1.1 开发环境配置 pom.xml <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--一定要对上springboot版本号,因......

TeddyIH
今天
7
0
玩转Spring Boot 注册Servlet、Filter、Listener

玩转Spring Boot 注册Servlet、Filter、Listener JAVA架构师Ya七月 2019-08-23 玩转Spring Boot 注册Servlet、Filter、Listener 在Servlet 3.0之前我们都是使用web.xml进行配置,需要增加Ser...

Java架构师ya七
今天
5
0
Dubbo服务限制大数据传输抛Data length too large: 13055248, max payload: 8388608解决方案

当dubbo服务提供者向消费层传输大数据容量数据时,会受到Dubbo的限制,报类似如下异常: 2019-08-23 11:04:31.711 [ DubboServerHandler-XX.XX.XX.XXX:20880-thread-87] - [ ERROR ] [com.al...

huangkejie
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部