Java中的位移运算符
移位运算符就是在二进制的基础上对数字进行平移。
我们知道,Java中byte、short和char类型在进行计算时都是先将其转换为int类型,同样在进行移位运算时也不例外。它们移位后的结果也都会变成int类型。由于int类型为32位的(1),所以对于byte、short、char和int进行移位时,规定实际移动的次数最多是31位,如果超过31,则按n = n % 32来计算,也就是说移位33次和移位1次得到的结果相同。移动long型的数值时(long是64位的),规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。您可以亲自动手做下试验。
现在我们介绍Java中的三种位移运算符:
1)《(左移)
运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字 《 移位的次数
例如: 5 《 2,则是将数字5左移2位
计算过程:
5 《 2
首先把3转换为二进制数字(int类型的话为32位,8字节;long的话为64位16字节)0000 0000 0000 0000 0000 0000 0000 0101,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0001 0100,则转换为十进制是20
数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。比如5 《 2 = 5 * 4
2)》(带符号右移)
运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补0,负数补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次方。
3)>>>(无符号右移)。
运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。其他结构和》相似。
位移运算通常用来对代码进行速度上的优化,用它来代替乘除法将是很好的选择。
下面来举几个例子,希望对大家使用位移运算符有所帮助
1.用位移运算符来实现 i / 100
100 = 64 + 32 + 4
所以对i / 100可以这样来表示: ( i 《 6 ) + ( i 《5) + ( i 《 2 )
2.写出( q 《 3 ) + ( q 《 1 )实现的代码
原式 = q * 2 ^ 3 + q * 2 ^ 1 = q * ( 8 + 2) = q * 10
转载于:https://blog.51cto.com/cfkjava/919786
Java中的位移运算符相关推荐
- Java培训教程:Java中的位移运算符!
学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过系统学习学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天小千给大家分享的 ...
- java中的位移运算符_Java 位移运算符
本人只是 Android小菜一个,写技术文档只是为了总结自己在最近学习到的知识,从来不敢为人师,如果里面有些不正确的地方请大家尽情指出,谢谢! 1.概述 Java 位移运算符是Java中基本的位运算操 ...
- Java 中的位移运算符
在源码中经常会看到一些位移运算符的使用,比如在看HashMap源码的时候,在计算hashMap容量的阈值的时候,就使用到了位移运算符,代码如下: java中有三种移位运算符 << ...
- java中的位移运算符_java中的移位运算符(, , )
java中有3种移位运算符 < >> : 右移运算符,不改变符号位,num >> n 表示二进制右移n位,结果相当于 num / (2的n次方) >>&g ...
- java中的移位运算符与无符号位移
引用: java中有三种移位运算符 java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2>> : 右移运算符,num >&g ...
- java里面value_「Java基础知识」Java中包含哪些运算符
原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...
- java中的比较运算符_Java基础---Java中的比较运算符(十三)
Java中的比较运算符 比较运算符用于判断两个数据的大小,例如:大于.等于.不等于.比较的结果是一个布尔值( true 或 false ). Java 中常用的比较运算符如下表所示: 注意哦: 1. ...
- Java中亦或运算符
Java中亦或运算符 最近遇到这样一道算法题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 示例: 输入[2562569] 输出:9 当时毫无 ...
- java中的++与--运算符
java中的++与–运算符 1.++自加 2.–自减 注意: (1)运算符出现在变量的左边,则先对变量进行加/减1,然后带入表达式进行计算 (2)运算符出现在变量的右边,则先将变量带入表达式中进行计算 ...
最新文章
- 我眼中的DevOps(转)
- js事件触发器fireEvent和dispatchEvent
- C语言输出素数简单,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
- mysql 二进制安装卸载_MySQL二进制版本的安装及卸载
- Oracle Buffer-cache (数据高速缓存)作用概述
- wxWidgets:wxPaintEvent类用法
- [Windows驱动开发](二)基础知识——数据结构
- [IOC]Unity使用
- 【RS】Amazon.com recommendations: item-to-item collaborative filtering - 亚马逊推荐:基于物品的协同过滤...
- oracle的安装与plsql的环境配置
- 关于shell脚本编程一些有用资源的小结
- spark基础之shuffle机制和原理分析
- 设计模式---开闭原则
- linux 查看所有端口号_linux系统:ss命令
- 水泵怎么做_燃气壁挂炉初次调试,要怎么做才好?
- vc浏览器_【36氪基金X一刻】零基础VC/PE行研标准班7月10日线上开课
- 腾讯云一站式物联PaaS平台IOT Suite助力行业加速“物联网+”
- 开发网站为“禁止复制”“禁用右键功能”(易被破解)
- 【MPEG】DVB / ATSC / ISDB区别
- 2016中期中国云计算市场报告