2019独角兽企业重金招聘Python工程师标准>>>

四、右移运算符

右移运算符>>使指定值的所有位都右移规定的次数。它的通用格式如下所示:

value >> num

这里,num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。下面的程序片段将值32右移2次,将结果8赋给变量a:

int a = 32;
a = a >> 2; // a now contains 8

当值中的某些位被“移出”时,这些位的值将丢弃。例如,下面的程序片段将35右移2 次,它的2个低位被移出丢弃,也将结果8赋给变量a:

int a = 35;
a = a >> 2; // a still contains 8

用二进制表示该过程可以更清楚地看到程序的运行过程:

00100011 35
>> 2
00001000 8

将值每右移一次,就相当于将该值除以2并且舍弃了余数。你可以利用这个特点将一个整数进行快速的2的除法。当然,你一定要确保你不会将该数原有的任何一位移出。

右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign extension ),在进行右移操作时用来保持负数的符号。例如,?8 >> 1 是?4,用二进制表示如下:

11111000 ?8 >>1 11111100 ?4

一个要注意的有趣问题是,由于符号位扩展(保留符号位)每次都会在高位补1,因此-1右移的结果总是?1。有时你不希望在右移时保留符号。例如,下面的例子将一个byte 型的值转换为用十六
进制表示。注意右移后的值与0x0f进行按位与运算,这样可以舍弃任何的符号位扩展,以便得到的值可以作为定义数组的下标,从而得到对应数组元素代表的十六进制字符。

// Masking sign extension.
class HexByte {
static public void main(String args[]) {

char hex[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'


};
byte b = (byte) 0xf1;

System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);}}

该程序的输出如下:

b = 0xf1

五、无符号右移

正如上面刚刚看到的,每一次右移,>>运算符总是自动地用它的先前最高位的内容补它的最高位。这样做保留了原值的符号。但有时这并不是我们想要的。例如,如果你进行移位操作的运算数不是数字值,你就不希望进行符号位扩展(保留符号位)。当你处理像素值或图形时,这种情况是相当普遍的。在这种情况下,不管运算数的初值是什么,你希望移位后总是在高位(最左边)补0。这就是人们所说的无符号移动(unsigned shift )。这时你可以使用Java 的无符号右移运算符>>> ,它总是在左边补0。

下面的程序段说明了无符号右移运算符>>> 。在本例中,变量a被赋值为-1,用二进制表示就是32位全是1。这个值然后被无符号右移24位,当然它忽略了符号位扩展,在它的左边总是补0。这样得到的值255被赋给变量a。

int a = -1; a = a >>> 24;

下面用二进制形式进一步说明该操作:

11111111 11111111 11111111 11111111 int型-1的二进制代码>>> 24 无符号右移24位00000000

00000000 00000000

11111111 int型255的二进制代码

由于无符号右移运算符>>> 只是对32位和64位的值有意义,所以它并不像你想象的那样有用。因为你要记住,在表达式中过小的值总是被自动扩大为int 型。这意味着符号位扩展和移动总是发生在32位而不是8位或16位。这样,对第7位以0开始的byte 型的值进行无符号移动是不可能的,因为在实际移动运算时,是对扩大后的32位值进行操作。下面的例子说明了这一点:

// Unsigned shifting a byte value.
class ByteUShift {
static public void main(String args[]) {
int b = 2;
int c = 3;

a |= 4;
b >>= 1;
c <<= 1;
a ^= c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);

该程序的输出如下所示:

a = 3
b = 1
c = 6

转载于:https://my.oschina.net/pracy87/blog/2990

JAVA按位逻辑运算基本教程(3)相关推荐

  1. 根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程...

    在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1  哪些知识点 ...

  2. 5W字高质量java并发系列详解教程(上)-附PDF下载

    文章目录 第一章 java.util.concurrent简介 主要的组件 Executor ExecutorService ScheduledExecutorService Future Count ...

  3. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  4. java 5%3_【Java】位操作符-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    位运算符java支持的位运算符有7个,分为两类:位逻辑运算和移位运算.位逻辑运算符包括按位取反(~).按位与( ).按位或(|)和按位异或(^)4种,.移位运算符包括左移( ).右移( )和无符号右移 ...

  5. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

    java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...

  6. Microchip PIC系列8位单片机入门教程(一)开发环境建立

    Microchip PIC系列8位单片机入门教程(一)开发环境建立 作者:Greg 第一节 开发环境建立条件 软件: (1)MPLAB X:集成开发环境下载地址:https://www.microch ...

  7. 微信开发从入门到精通教程大全 资料大全 java和php版本;教程文档、代码、视频 微信商城实例

    一.官网 微信公众服务号申请.认证(开通支付)-微信开发图文教程 http://blog.csdn.net/wyx100/article/details/46944863 1.1 账号申请 https ...

  8. (java web后端方向)如何让你的简历为你争取到更多的面试机会,内容来自java web轻量级开发面试教程...

    我们在做培训时,会发现一个不合理的情况,一些程序员能力不错,在公司里也是技术牛人,但发出去的简历往往会石沉大海,没有回复.对于刚毕业的大学生或工作年限在2年之内的程序员,这个情况会更严重. 这种情况下 ...

  9. java 3des_如何用Java进行3DES加密解密 java实现3des加密解密教程

    3des,全称为3DESede或TripleDES,中文解释为是三重数据加密,用户可以通过通过对DES算法进行改进,针对每个数据块进行三次DES加密,下面小编为你带来java实现3des加密解密教程! ...

最新文章

  1. 震撼!Science:“第三手指”可增强人体功能
  2. 剑指offer-3 从尾到头打印链表
  3. C++读取txt数据为二维数组 将数据保存到txt文本中
  4. 有一本书,适合零到十年经验的程序员看
  5. ubuntu 开发板ping通虚拟机挂载nfs服务器
  6. 10截图时屏幕变大_手机上网课、开视频会议,如何让屏幕变大一点?
  7. bean json转kotlin_Android--------kotlin插件神器Json直接生成javaBean
  8. Windows下jupyter notebook 修改打开的浏览器为chrome
  9. 安卓团课快进_青年大学习网上主题团课第十季第七期答案
  10. 一分钟带你打开TikTok直播的世界?
  11. 开放源码的.NET 反编译工具 .NET IL调试工具 学习微软中间语言(MSIL)的绝佳工具 Dotnet IL Editor 推荐...
  12. oracle安装5.1,5.1 Oracle RAC的安装(5)
  13. 快捷指令快速保存无水印视频和图集
  14. java并发包和类总结-JUC总结
  15. 《公司的力量》纪录片
  16. python4delphi和tesserocr库安装配置
  17. python中write函数%啥意思_python write( )函数
  18. CloudCore引领核心网云化转型
  19. 计算机专业英语完形填空,英语专业四级完形填空练习附答案
  20. 网络版收银系统服务器更新是什么意思,POS收银系统也需要更新的五大理由

热门文章

  1. 帮4.4亿车主加油省钱,是一门好生意吗?
  2. JS | 教练,我想做习题3
  3. 经典超拽的QQ2011个性签名
  4. 蓝桥杯C/C++每日一练之回文数
  5. oracle锁表问题并发枷锁,慢查询
  6. python实时播放音频和录音_基于python的实时音频信号处理
  7. HashMap的底层结构、原理、扩容机制
  8. [附源码]计算机毕业设计Node.js善茶茶叶网站(程序+LW)
  9. 希腊和土耳其的400年的血海深仇
  10. Win10启动wifi共享源码(C#)