`
lzj0470
  • 浏览: 1273100 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA基础(JAVA移位运算符)

阅读更多

移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
  在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。
  三种移位运算符的移动规则和使用如下所示:
  <<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
  语法格式:
  需要移位的数字 << 移位的次数
  例如: 3 << 2,则是将数字3左移2位
  计算过程:
  3 << 2
  首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:
  在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
  >>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
  语法格式:
  需要移位的数字 >> 移位的次数
  例如11 >> 2,则是将数字11右移2位
  计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
  >>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
  其他结构和>>相似。
  小结
  二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。
  实例操作:
  public class URShift {
  public static void main(String[] args) {
  int i = -1;
  i >>>= 10;
  //System.out.println(i);
  mTest();
  }
  public static void mTest(){
  //左移
  int i = 12; //二进制为:0000000000000000000000000001100
  i <<= 2; //i左移2位,把高位的两位数字(左侧开始)抛弃,低位的空位补0,二进制码就为0000000000000000000000000110000
  System.out.println(i); //二进制110000值为48;
  System.out.println("<br>");
  //右移
  i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100
  System.out.println(i); //二进制码为1100值为12
  System.out.println("<br>");
  //右移example
  int j = 11;//二进制码为00000000000000000000000000001011
  j >>= 2; //右移两位,抛弃最后两位,整数补0,二进制码为:00000000000000000000000000000010
  System.out.println(j); //二进制码为10值为2
  System.out.println("<br>");
  byte k = -2; //转为int,二进制码为:0000000000000000000000000000010
  k >>= 2; //右移2位,抛弃最后2位,负数补1,二进制吗为:11000000000000000000000000000
  System.out.println(j); //二进制吗为11值为2
  }
  }
  在Thinking in Java第三章中的一段话:
  移位运算符面向的运算对象也是
  二进制的“位”。 可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。 “有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
  若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也 是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lange253/archive/2009/05/03/4146680.aspx

分享到:
评论

相关推荐

    java 移位运算符的资源

    Java 移位运算符是编程语言中用于处理二进制位的一种高效操作方式,它们能够对整数类型(byte, short, int, long)的值进行左移、右移和无符号右移操作。理解这些运算符对于优化代码和深入理解计算机底层工作原理至...

    Java移位运算符1

    在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(&gt;&gt;)以及无符号右...

    Java中的进制与移位运算符

    在Java编程语言中,进制表示法...总的来说,Java中的进制表示法和移位运算符是程序员必备的技能,它们不仅关乎基础理论,也直接影响程序的性能和正确性。通过深入学习和实践,我们可以更有效地利用这些工具来解决问题。

    Java移位运算符详解实例(小结)

    Java移位运算符详解实例 Java移位运算符是Java语言中的一种基本运算符,用于对二进制数进行位移操作。移位运算符主要包括左移位运算符()、右移位运算符(&gt;&gt;&gt;)和带符号的右移位运算符(&gt;&gt;)。这些运算符可以单独...

    java运算符大全

    16. **带符号右移位运算符** (&gt;&gt;): 根据符号位扩展,向右移动指定位数,高位补0(正数)或1(负数)。 17. **无符号右移运算符** (&gt;&gt;&gt;): 不考虑符号位,向右移动指定位数,高位用0填充。 18. **小于运算符** (&lt;): ...

    Java三种移位运算符原理解析

    Java移位运算符是Java编程语言中的一种基本操作符,主要用于对二进制数的移位操作。Java中有三种移位运算符:左移运算符()、带符号右移运算符(&gt;&gt;)和无符号右移运算符(&gt;&gt;&gt;)。下面我们将详细介绍这三种移位...

    JAVA基础之java的移位运算

    Java的移位运算涉及到整数类型数据的二进制位操作,这对于理解计算机底层运作和优化代码至关重要。移位运算主要包括左移运算符()和右移运算符(&gt;&gt;,&gt;&gt;&gt;)。在Java中,所有的整数类型(除了char类型外)都是有符号...

    JAVA运算符.pdf

    Java中的位运算符对整型数值中的每一位进行操作,包括逻辑位运算符和移位运算符。移位运算符可以用于高效的乘除法计算,如`x 相当于`x * 2^n`,`x &gt;&gt; n`相当于`x / 2^n`。 类型转换可以是自动的(如较小类型转换为...

    Java运算符优先级

    5. **移位运算符**: - `(左移)、`&gt;&gt;`(右移)、`&gt;&gt;&gt;`(无符号右移)。 - 结合性是从左向右,即先处理左边的操作数。 6. **比较运算符**: - `、`、`&gt;`、`&gt;=`、`instanceof`。 - `instanceof`用于判断一个...

    Java运算符+(优先级、目数)+.doc

    11. **位移运算符(, &gt;&gt;, &gt;&gt;&gt;):** 左移位运算符将二进制位向左移动指定位数,右移位运算符则向右移动。无符号右移运算符对负数也会填零。这些都是双目的运算符,从左到右结合。 12. **关系运算符(&lt;, &gt;, , &gt;=, ...

    JAVA 运算符的基本了解与使用

    Java 中还提供了一些移位运算符,例如左移 ()、右移 (&gt;&gt;) 和无符号右移 (&gt;&gt;&gt;) 等。 7. 三元运算符 三元运算符是一种特殊的运算符,用于根据条件表达式的结果来选择不同的值。其格式为:变量名 = 条件表达式 ? 值1 ...

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    在学习Java的过程中,运算符是必不可少的基础知识,它用于执行数学或逻辑操作。本资料主要讲解了Java中的运算符,特别是移位运算和逻辑运算,这两部分是理解数据处理和程序控制的关键。 首先,我们来探讨移位运算。...

    java运算符优先级.doc

    5. 移位运算符:、&gt;&gt;、&gt;&gt;&gt; 6. 比较运算符:==、!=、&lt;、&gt;、、&gt;= 7. 逻辑运算符:&&、|| 8. 赋值运算符:=、+=、-=、\*=、/=、%=、、&gt;&gt;=、&=、^=、|=、&gt;&gt; 二、Java 异常处理 Java 中的异常处理机制可以帮助开发者...

    Java运算符+优先级、目数+.pdf

    Java中的移位运算符包括: * 左移位():从左到右的双目运算符,用于将变量左移指定的位数。 * 带符号右移(&gt;&gt;):从左到右的双目运算符,用于将变量右移指定的位数,并保留符号位。 * 无符号右移(&gt;&gt;&gt;):从左到...

    java运算符优先级[整理].pdf

    7. 左移位、右移位运算符 左移位()、右移位(&gt;&gt;)运算符的优先级相同,且从左到右。 8.关系运算符 关系运算符包括小于(&lt;)、大于(&gt;)、小于或等于()、大于或等于(&gt;=)等。它们的优先级相同,且从左到右。 ...

    java运算符优先级[借鉴].pdf

    Java运算符优先级 Java语言中的运算符优先级是指在Java语言中各种运算符的执行顺序和结合性。了解Java运算符优先级是非常重要的,因为它可以帮助我们正确地编写Java程序,避免一些常见的错误。 以下是Java运算符...

    java中关于移位运算符的demo与总结(推荐)

    下面小编就为大家带来一篇java中关于移位运算符的demo与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java基础试题综合试题

    7. **移位运算符**:Java中的无符号右移`&gt;&gt;&gt;`运算符,将数字向右移动指定的位数。`a &gt;&gt;&gt; 2`表示将8向右移动2位,结果是2。 8. **条件语句**:这个程序段的执行会根据条件判断,由于`a=3`,所以第二个`if`语句成立,...

Global site tag (gtag.js) - Google Analytics