java中 << 什么意思?比如1<<30,谢谢哦~~

飞烟步尘 | 浏览 3286 次
发布于2011-12-14 16:09 最佳答案
移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。在移位运算时,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; //二进制为:0000000000000000000000000001100i <<= 2; //i左移2位,把高位的两位数字(左侧开始)抛弃,低位的空位补0,二进制码就为0000000000000000000000000110000System.out.println(i); //二进制110000值为48;System.out.println("<br>");//右移i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100System.out.println(i); //二进制码为1100值为12System.out.println("<br>");//右移exampleint j = 11;//二进制码为00000000000000000000000000001011j >>= 2; //右移两位,抛弃最后两位,整数补0,二进制码为:00000000000000000000000000000010System.out.println(j); //二进制码为10值为2System.out.println("<br>");byte k = -2; //转为int,二进制码为:0000000000000000000000000000010k >>= 2; //右移2位,抛弃最后2位,负数补1,二进制吗为:11000000000000000000000000000System.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的结果。 考试大等级站收集整理! 来源:考试大-计算机二级考试

参考资料: http://www.examda.com/ncre2/JAVA/fudao/20081027/083847370.html

java中 什么意思?比如130相关推荐

  1. java中collection方法_Java 8中的Collector toCollection()方法

    toCollection()Java中的Collector类的方法返回一个Collector,该Collector以遇到的顺序将输入元素累积到一个新的Collection中. 语法如下static & ...

  2. 在java中使用redis

    在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...

  3. java中的IO详解(下)

    BufferedReader的小例子 注意: BufferedReader只能接受字符流的缓冲区,因为每一个中文需要占据两个字节,所以需要将System.in这个字节输入流变为字符输入流,采用: 1  ...

  4. java中的IO详解(上)

    Java中的IO整理完整版(一) [案例1]创建一个新文件 1 import java.io.*; 2 class hello{ 3     public static void main(Strin ...

  5. java中椭圆类_Java中的Graphics2D类基本使用的教程

    Java中的Graphics2D类基本使用的教程 Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能 ...

  6. java中jdbc的封装笔记_JDBC封装学习笔记(三)---面向对象的JDBC,使用preparedStatement...

    使用PreparedStatement对象:为什么要使用PreparedStatement 原因:(1)使用Statement需要拼接SQL,太费劲,也容易出错. String sql = " ...

  7. 为什么 Java 中 2*(i*i) 比 2*i*i 更快?

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取公众号专属资料 有人在 Stack Overflow 上提问,为什么 Java ...

  8. java中必检异常有哪些_Java面试题经典面试题220道(附答案)

    Java基础: 1.JDK 和 JRE 有什么区别? 2. == 和 equals 的区别是什么?== 解读 3. 两个对象的 hashCode() 相同, 那么 equals() 也一定为 true ...

  9. 品味性能之道十一:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

  10. Java中使用AMQ的简单实例

    好了,接上一篇,在对JMS的概念以及AMQ的下载安装有了一定认识之后,本篇就来学习一下AMQ在Java中的Hello World级使用(下文我将着重把重点写在注释里面,请注意代码注释部分!!!). 开 ...

最新文章

  1. python 语言教程(3)数据类型
  2. 得到指定进程所有窗口。显示 影藏 置顶。
  3. linux交叉编译时报错:file not recognized: File format not recognized
  4. php病毒图片后缀名,脚本图片类后门病毒的完美使用方法
  5. TensorFlow 教程 --进阶指南--3.5线程和队列
  6. Flink 大规模作业调度性能优化
  7. C++ 冰河木马的实现
  8. IntelliJ IDEA之Java开发常规项目配置介绍
  9. 秩为1的矩阵的性质总结
  10. android平板生产力工具,重塑应用生态,让安卓平板成为生产力工具:华为MatePad Pro简体验!...
  11. 盘点2022年爆火的小程序游戏
  12. SEO是什么?前端如何进行SEO优化
  13. 拉姆达999城市电话114 V3.3.1
  14. 计算机组成北大,计算机组成原理-PKUSEI.PDF
  15. Kaop打印项之表格
  16. 线上实时监测推广效果,App投放渠道数据分析
  17. java发现城市_java实现简单注册选择所在城市
  18. 文字阴影 - text-shadow
  19. Django——Ajax
  20. 在iBooks store 发布Epub格式电子书

热门文章

  1. python之函数习题
  2. mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  3. 电影视频剪辑怎么做?分享三个小技巧,剪辑其实也不难
  4. AN 非空检测以及影片剪辑元件调用内部元件
  5. 博客背景壁纸推荐(一)CSDN图床
  6. MarkDownPad 2实用教程
  7. 《拼多多为什么崛起?》总结笔记
  8. 阿里云服务器防止ddos被攻击
  9. flash player 11.2 64位 linux,Adobe Flash Player 11.2.202 Beta 1支持 64位操作系统
  10. 2021中国最好的自行车牌子排名世界十大山地自行车品牌排行榜