java对位移运算越界的优化

原创 2007年09月21日 19:56:00
考察下面的代码输出结果是多少?
    int a=5;
    System.out.println(a<<33);
    按照常理推测,把a左移33位应该将a的所有有效位都移出去了,那剩下的都是零啊,所以输出结果应该是0才对啊,可是执行后发现输出结果是10,为什么呢?因为Java语言对位移运算作了优化处理,Java语言对a<<b转化为a<<(b%32)来处理,所以当要移位的位数b超过32时,实际上移位的位数是b%32的值,那么上面的代码中a<<33相当于a<<1,所以输出结果是10. 

Java 中的位移运算

位移运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:>(带符号右移)和>>>(无符号右移)。 计算规则如下: ① 左移n位相当于乘以2的n次方。 ② 右移n位相当...
  • shineflowers
  • shineflowers
  • 2014年12月02日 11:27
  • 2354

位运算与优化

原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。 例如: X=+101011 , [X]原= 0...
  • OnafioO
  • OnafioO
  • 2014年10月01日 17:21
  • 657

【Java】移位运算

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

位移运算越界怎么处理

请看下面的代码输出结果是多少?     int a=5;     System.out.println(a     按照常理推测,把a左移33位应该将a的所有有效位都移出去了,那剩下的都是零啊,所以...
  • u014730159
  • u014730159
  • 2014年04月18日 13:32
  • 153

Java_语法基础_移位运算的真实剖析

Java中定义了3种移位运算符,分别是左移运算符“”和无符号右移运算符“>>>”,对于移位运算,移位运算两边的操作数要求为整型,即byte、short、char、int或long类型,或者通过拆箱转换...
  • u012552052
  • u012552052
  • 2015年03月24日 14:33
  • 1883

JAVA移位运算与进制转换

关于数据的基础知识众所周知,在计算机中,数据都是以2进制的方式储存。举个最最最简单的例子 10进制整数 1 以2进制表示 1 10进制整数 2 以2进制表示为10 10进制整数 16 ...
  • github_35306304
  • github_35306304
  • 2017年01月22日 18:39
  • 293

java面试题三 位运算符

  • jianfpeng241241
  • jianfpeng241241
  • 2015年09月16日 01:43
  • 407

Java位运算原理及使用讲解

前言 日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法。举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1。可能的做法是使用三木运算符,判断原始...
  • Goskalrie
  • Goskalrie
  • 2016年10月12日 14:12
  • 10082

Java 位运算符 深入理解

在Java中存在着这样一类操作符,是针对二进制进行操作的,它们分别是&、|、^、~、>>、>>几个位操作符,无论是初始值是按照何种进制,都会换算成二进制进行位 操作。接下来对这几种操作符进行一下简单...
  • securitit
  • securitit
  • 2015年07月21日 21:48
  • 514

“<<”,“|” ,"&" 运算 简单应用场景

简介: 近日,偶然学习到一个知识点,就是用“与”运算 算出来的结果来传值,Android framework中 通过包管理器来获得 应用程序信息,如下: PackageManager pm =...
  • niu0147
  • niu0147
  • 2015年08月28日 17:46
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java对位移运算越界的优化
举报原因:
原因补充:

(最多只允许输入30个字)