无符号右移位操作符“>>>”在将bit串右移位时,从bit串的最左边填充0,这和带符号右移位操作符“>>”不同。“>>”在将bit串右移位时,从bit串的最左边填充原来最左边的位。也就是说,bit串原来最左边的位是符号位,如果为1,则在带符号右移时最左边始终填充1;如果为0,则在带符号右移时最左边始终填充0。
移位操作符的例子见下表。
操作 结果 说明
00110010 << 2 11001000 右边始终填充0
00110010 >> 2 00001100 结果一样
00110010 >>> 2 00001100
10110010 >> 2 11101100 结果不同
10110010 >>> 2 00101100
“按位与”操作符“&”对两个bit串按位进行逻辑与,“按位或”操作符“|”对两个bit串按位进行逻辑或,“按位异或”操作符“^”对两个bit串按位进行异或操作。运算规则如下表所示。
按位与 按位或 按位异或
0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0
0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1
1 & 0 = 0 1 | 0 = 1 1 ^ 0 = 1
1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 0
---------------------华丽的分割线------------------------------------------
Java中的移位,如果是short,char,byte的话,都会转换成int的形式
再进行移位的。
试看:
1.) byte a = 27;// 转换成int为 00000000000000000000000000011011
byte b = -1;转换成int为 11111111111111111111111111111111
int g = a >> 1;// 有符号右移1位,左侧缺的位以符号位补齐,正数就是0, "00000000000000000000000000001101" = 13
int f = b>> 1; // 有符号右移1位,左侧缺的位以符号位补齐,负数就是1, “11111111111111111111111111111111”= -1
故此时打印出来,g=13,gf=-1。
g = a >>> 1;// 无符号右移1位,左侧缺的位以0补齐, "00000000000000000000000000001101" = 13
f = b>>> 1; // 无符号右移1位,左侧缺的位以0补齐, “01111111111111111111111111111111”= 2147483647
故此时打印出来,g=13,gf=2147483647。
f = b<< 1; // 无符号左移1位,右侧缺的位以0补齐, “10000000000000000000000000000010“= -2
故此时打印出来,f= -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的结果。
分享到:
相关推荐
经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!
位操作,很强大。由于在工作中遇到一次,基本不会,为了学习,就整理了一下,集中学习了次。为以后的使用提供参照。
NULL 博文链接:https://wjt276.iteye.com/blog/690306
Java位运算操作 左位移 右位移 与或非的操作
官网下载的windows的64位操作系统下的java的jdk17安装包
java位运算符之|(OR)操作视频!!!
在Java中,按位操作符用于对整数进行位级别的操作 按位与(&)操作符 按位或(|)操作符 按位异或(^)操作符 按位取反(~)操作符 左移()操作符 右移(>>)操作符
java位运算符之左移操作视频!!!!
java位运算符&AND操作视频!!!!
java安装程序,适用于windows32位操作系统。为初学者提供便利。
发现javaRD800.dll 32位操作系统的 比较难找,现在正好手里有现成的,所有分享出来,希望可以帮到需要的同学。
java安装程序,适用于windows64位操作系统。为初学者提供便利。
解决java串口操作中发送数据中只要包含0x0A,操作系统自动在0x0A前添加0x0D的的问题例子程序。
这是一个Java jdk17 编译器,如果需要安装其他版本请到oracle甲骨文官网下载。
JAVA程序,适用于64位操作系统,有需要的可以下载看看。
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...
适用于java 开发者,该版本为windows系统java软件开发包 1.8 稳定版,双击进行安装,全程傻瓜式操作,自动设置环境变量,无须在系统设置进行java环境的配置,安装完成后在dos界面 输入 java -version即可发现已经...
Java JDK 1.8 64位是一款Java开发工具包,适用于64位操作系统。它包含了Java编译器、Java虚拟机、Java类库等开发所需的工具和组件,可以用于开发和运行Java应用程序。该工具包支持多种操作系统,包括Windows、Linux...
java 控制鼠标*键盘的 jna 库32位
java技术,对象操作:数值取整和保留两位小数,将数值转换成字符串。