移位运算 :将整数转化为二进制(以补码的形式),按位平移。

    <<     左移

    >>     右移

    >>>   无符号右移

  << 右移:

    按位做平移,末位用0补上(正负数都一样)

    a << n;

    如果 a 是  byte、short、int 类型 那么 a << n 就是  a << (n%32)

      int a = 5;

      System.out.println(a<<3);     //输出 40

      System.out.println(a<<35);   //输出 40

    如果 a 是  long 类型  那么 a << n 就是  a << (n%64)

      long a = 5;

      System.out.println(a<<3);     //输出 40

      System.out.println(a<<35);   //输出 171798691840

      System.out.println(a<<67);  //输出 40

     注意 :由于这只是按位平移,有可能符号化会改变

      int a = 1;

      a<<=31;

      System.out.println(a);    //输出 -2147483648

      System.out.println(Integer.toBinaryString(a));    //输出 1000 0000 0000 0000 0000 0000 0000 0000

      由于最高位是1所以是一个负数

  >> 右移:

    按位做平移

    如果 a 是  byte、short、int 类型 那么 a >> n 就是  a >> (n%32)

      int a = 40;

      System.out.println(a>>3);     //输出 5

      System.out.println(a>>35);   //输出 5

    如果 a 是  long 类型  那么 a >>n 就是  a >> (n%64)

      long a = 40;

      System.out.println(a>>3);     //输出 5

      System.out.println(a>>35);   //输出 0

      System.out.println(a>>67);  //输出 5

    注意 :  正数右移,前补位0(正数往右移,最小为0)

          System.out.println(40>>31);   //输出 0

          System.out.println(Integer.toBinaryString(40>>31));  //输出 0

        负数右移,前补位1(负数往右移,最大为-1)

          System.out.println(-40>>31);   //输出 -1

          System.out.println(Integer.toBinaryString(-40>>31));  //输出  1111 1111 1111 1111 1111 1111 1111 1111

       负数右移,并不仅仅是除以2

          System.out.println(-5>>1);     //输出 -3

          System.out.println(Integer.toBinaryString(-5));    //输出 1111 1111 1111 1111 1111 1111 1111 1011

          System.out.println(Integer.toBinaryString(-5>>1));   //输出 1111 1111 1111 1111 1111 1111 1111 1101

  

  >>>无符号右移: 

    按位做平移,前补位用0(正负数都一样)

    如果 a 是  byte、short、int 类型 那么 a >>> n 就是  a >>> (n%32)

      int a = 40;

      System.out.println(a>>>3);     //输出 5

      System.out.println(a>>>35);   //输出 5

    如果 a 是  long 类型  那么 a >>> n 就是  a >>> (n%64)

      long a = 40;

      System.out.println(a>>>3);     //输出 5

      System.out.println(a>>>35);   //输出 0

      System.out.println(a>>>67);  //输出 5

   

  版权声明:转载请注明出处:http://www.cnblogs.com/lkcc/

  请读者亲自试一试代码,以免文章有误而误解。

谢谢读看!

java 移位运算的更多相关文章

  1. 【原创】Java移位运算

    学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 ...

  2. [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)

    一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...

  3. Java移位运算

    java中移位运算符有三种“<<”.“>>”.“>>>”,没有“<<<”运算符. “<<”运算符将二进制位进行左移,低位用0来填 ...

  4. Java 移位运算、符号位扩展

    类型取值范围 short 是1字节,即8位.而且 Java 中只有有符号数,所以最大值 0111,1111=2^7-1. 同时计算机中以补码形式存负数,所以可以多表示一个数,则最小值 1000,000 ...

  5. java移位运算的用途

    参考下面这篇文章 http://blog.csdn.net/gaowen_han/article/details/7163104 http://jinguo.iteye.com/blog/540150 ...

  6. JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)

    一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...

  7. Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题

    一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...

  8. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

  9. java中位运算和移位运算详解

    一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算        分别看一下正数和负数的具体运算步骤 ...

随机推荐

  1. phper談談最近重構代碼的感受(3)

    这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方. 1.消灭过多的临时变量. 有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长 ...

  2. idea导入web项目的部署

    前几天 参考 http://zyjustin9.iteye.com/blog/2172712 这篇文章的部署,一直没有问题,今天又部署了一个项目,按照这个步骤,死活却不能部署成功.最后发现,原来是在部 ...

  3. Sql Server 日期格式化

    select CONVERT(date,myDtae,23),ID from myFirstTable; http://www.cnblogs.com/hantianwei/archive/2009/ ...

  4. Java基础知识之文件操作

    流与文件的操作在编程中经常遇到,与C语言只有单一类型File*即可工作良好不同,Java拥有一个包含各种流类型的流家族,其数量超过60个!当然我们没必要去记住这60多个类或接口以及它们的层次结构,理解 ...

  5. eclipse里xml提示包名的插件——Rinzo

    1.Rinzo简介 在官方网站上的介绍到,Rinzo是一款Eclipse的XML编辑器,可以使在处理XML文件时变得简洁高效.与一般的XML文件相比,具有以下特点: l 自动显示DTD或Schema里 ...

  6. Theos 工程make package时报错

    错误: /Applications/Xcode.app/Contents/Developer/usr/bin/make package requires you to have a layout/ d ...

  7. maven项目如何引用本地的jar包

    下载该jar包到本地(如下载目录结构为:D:\Users\lu.wang\Downloads\searchservice\searchservice\jar\ttd.search.searchserv ...

  8. noip 2016 提高组题解

    前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...

  9. unity3d和php后台简单交互--二

    上次我们讨论了u3d和php的简单交互,现在我们接着讨论u3d和php交互,这里我们讨论的是php的后台大家可以延伸为其他语言.在实现的开发中我们很少通过发送字符或者字段到服务器上的,我们一般会请求包 ...

  10. linux shell脚本学习xargs命令使用详解

    作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处 ...