框架乱飞的年代,时常还得往框架源码里看,对内在原理没点理解,人家就会认为你不太行。平时开发你可能没咋用过位移运算,但往源码里一看,就时常能看到它。我也是看着看着,突然仔细一琢磨,又不由得发现自己基础知识不扎实,得,又得给自己补一课。

类型

算术移位:不改变符号位的移位操作

逻辑移位:不考虑符号位,所有的位数都要进行移位

java里有三种移位运算符<<,>>,>>>,照上面的定义所说,那<<,>>属于算术移位,>>>属于逻辑移位。

规则

  1. >>右移,符号位不移动,当符号位是1,高位补1,反之则补0,低位丢弃。

  1. >>>无符号右移,符号位移动,高位补0,低位丢弃。

  1. <<左移,符号位不移动,低位补0,高位丢弃

  1. 所有计算都是先转为补码,移动n位就相当于,移动n%32位或n%64位

  1. 移位运算有两种,一种是int类型的,一种是long类型的,像byte、char、short数据都会转成int类型再计算

以上规则是我个人的一点小总结,我现在有点疑问的是,所谓的算术移位(<<和>>)的时候,符号位究竟要不要变?下面我们用例子来说话。

代码:

         //000000000 00000000 00000000 00000010 //2的原码和补码//100000000 00000000 00000000 00000010 //-2的原码//111111111 11111111 11111111 11111110 //-2的补码// 右移System.out.println(2>>1);System.out.println(2>>31);System.out.println(2>>32);System.out.println(-2>>1);System.out.println(-2>>31);System.out.println(-2>>32);System.out.println("*********************************************************************");// 无符号右移System.out.println(2>>>1);System.out.println(2>>>31);System.out.println(2>>>32);System.out.println(-2>>>1);System.out.println(-2>>>31);System.out.println(-2>>>32);System.out.println("*********************************************************************");// 左移System.out.println(2<<1);System.out.println(2<<31);System.out.println(2<<32);System.out.println(-2<<1);System.out.println(-2<<31);System.out.println(-2<<32);

>>右移

>>>无符号右移

<<左移

综上:

关于java移位运算的一点讨论相关推荐

  1. java移位运算 cpu gpu_关于java操作中的移位运算

    packagecom.dgjianke.ch03;/*** 关于二进制数据的一些操作 *@authordgjianke **/ public classBitManipulation {/*** 打印 ...

  2. python做除法有不精确的尾数_python除法运算的一点讨论,大神指点一个问题没有解决。谢谢。。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 关于 >>>10%-3 -2 理解:10/-3=-3.3333333 整除后向下圆整 10//-3=-4 求余10-(-3)*(-4)= ...

  3. Java移位运算之算术右移位

    算术左移运算符 >>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1. 语法格式: 需要移位的数字 >> 移位 ...

  4. Java二进制位运算、移位运算、、

    为什么80%的码农都做不了架构师?>>>    Java二进制位运算.移位运算 思考题 1.请看下面的代码段,回答a,b,c,d,e结果是多少? public static void ...

  5. java逻辑移位和算术移位,关于对移位运算的理解

    标签: 之前在<计算机组成原理>这门课中学习了很多,其中包括二进制数的移位运算.当时并不理解他们用来作甚,迷迷糊糊的状态,学了都不知道为什么要学.什么东西总是到了需要用到的时候,才明白,哦 ...

  6. Java从入门到精通08-二进制、位运算、移位运算

    Java从入门到精通08-二进制.位运算.移位运算 二进制(Binary)数用0和1两个数字及其组合来表示任何数.进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右到左 ...

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

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

  8. 关于JAVA匿名内部类,回调,事件模式的一点讨论

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 关于JA ...

  9. 【Java】移位运算

    以前一直没有研究二进制的移位运算的应用场景是什么,怎么运算?怎么实现数据的四则运算的? 直到最近,在看Think in Java的书籍,才真正理解这个东西.下面记录一下学习笔记. 1,二进制 1.1 ...

最新文章

  1. 演讲实录丨周斌:人工智能推动新基建和数据中心的技术革新
  2. GARFIELD@07-12-2005 DILBERT
  3. gdb debug memory address
  4. python计算某年某月多少天_Python编程实现输入某年某月某日计算出这一天是该年第几天的方法...
  5. SQLIO 模拟随机或者顺序的方式来测试磁盘IO的性能
  6. 总分第一!阿里云数据库应用迁移解决方案通过信通院首批最高级评测
  7. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解
  8. Hadoop分布式集群搭建详细过程
  9. Intellij Idea系列之导Jar包与编写单元测试(二)
  10. MySQL Binlog--binlog_format参数
  11. # 20162312 2017-2018 《程序设计与数据结构》第7周学习总结
  12. js 操作字符串方法记录
  13. 如何用产品经理思维写一篇商业计划书
  14. node mysql商城开发_GitHub - crouse/nideshop: NideShop:基于Node.js+MySQL开发的开源商城(服务端)...
  15. 编程模拟高尔顿钉板(正态分布)C++
  16. 身份证转换工具类(Java)
  17. win2012服务器 注册表,第十一章 Windows Server 2012 R2 注册表域注册表编辑器 ---学习笔记...
  18. 长租公寓如何管理水电及租金?
  19. @所有人:产品汪、运营喵专属台历,你值得拥有!
  20. pycharm设置ctrl+滚轮实现字体缩放

热门文章

  1. 上周 牛牛牛 的 GitHub 项目
  2. Hadoop学习笔记之修改主机名IP地址
  3. Java项目:SSM邮件收发管理系统
  4. loading页面加载(等待页面加载完毕再隐藏loading页面)
  5. 电影职员表中英文正确翻译及介绍
  6. python绿色参数_色差估计在python
  7. 仿网易云音乐 专辑图片折叠轮播
  8. 象征性消费行为与体验营销
  9. python接入Vissim二次开发,源码
  10. 转:Latex数学宏包集锦