`
zachary.guo
  • 浏览: 482798 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 的位运算符和移位运算符

阅读更多
        Java 语言有很多运算符,其中位运算符和移位运算符在实际基于业务需求编程时很少用到。但需要用到它们时,却忘记了它们的具体的使用方式。这里就将这两类很容易被忽视的运算符做一个总结。

        位运算符有四种:与(&),或(|),非(~),异或(^)。位运算符演示:
与(&):与运算,当两个操作数均为 1 时,结果为 1,否则为 0。如 1100&1010=1000
或(|):或运算,当两个操作数之一为 1 时,结果为 1,否则为 0。如 1100|1010=1110
非(~):非运算,0 变 1,1 变 0。
异或(^):异或运算,当两个操作数不同时,结果为 1,否则为 0。如 1100^1010=0110

        移位运算符有三种:带符号右移(>>),无符号右移(>>>),左移(<<)。移位运算符演示:
带符号右移(>>):带符号的移位处理,它作位移处理时,会先将值向右移,并在高位补 0。然后将移位后被补 0 的高位,全部改成原来的最高位的值(代表正负号的位)。也就是说负的值移位后,仍然是负的值,比如:
    -10 >> 2 = -3
    -10 = 1111 1111 1111 1111 1111 1111 1111 0110
    右移 2 位:0011 1111 1111 1111 1111 1111 1111 1101
    右移后的最高两位补了 0,但由于是负数,两个 0 全要改为 1(负数标识)
    最终结果:1111 1111 1111 1111 1111 1111 1111 1101

无符号右移(>>>):无符号的移位处理,它不会将所处理的值的最高位视为正负符号,所以做移位处理时,会直接在空出的高位填入 0。当我们要做移位的原始值并非代表数值时(例如:表示颜色图像的值,最高位并非正负号),可能就会需要使用此种无符号的移位。比如:
    -10 >>> 2 = 1073741821
    -10 = 1111 1111 1111 1111 1111 1111 1111 0110
    右移 2 位:0011 1111 1111 1111 1111 1111 1111 1101
    最终结果 0x3FFFFFFD = 1073741821

左移(<<):此操作符是左移操作。它不会将所处理的值的最高位视为正负符号,它做移位处理时,会先将值向左移,并在低位补 0。由于不对最高位进行处理,因此移位前和移位后的值的正负会改变。

所以,没有所谓的 <<< 运算符只说了。

        这里补充一下 Java 对负数的处理。Java 里的基本类型,都是带符号的。Java 中,最高位被视作符号位,因此正数的最高位一定为 0,负数的最高位一定为 1。使用补码表示负数:
如,数字 -5,它的二进制如何表示?
             5 = 0000 0000 0000 0000 0000 0000 0000 0101
按位取反(反码)  = 1111 1111 1111 1111 1111 1111 1111 1010
反码 + 1(补码) = 1111 1111 1111 1111 1111 1111 1111 1011
          即 -5 = 1111 1111 1111 1111 1111 1111 1111 1011


给定一个负数的二进制,怎么知道它是负几呢?由于负数是用补码来表示的,而补码又是在反码的基础上加 1 得到的。因此:
1. (补码 - 1),即(负数的二进制表达式 - 1),得到反码
2. 对反码按位取反,得到的二进制,就是负数的绝对值了。
分享到:
评论

相关推荐

    java 移位运算符的资源

    java 移位运算符 java 移位运算符 java 移位运算符

    Java运算符介绍.pptx.pptx

    Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符用于实现不同的数学和逻辑功能。 算术运算符介绍 算术运算符包括加、减、乘、除和取余等基本运算,它们可以对整数、浮点数和字节...

    Java移位运算符1

    java中有三种移位运算符 : 左移运算符,num ,相当于num乘以2&gt;&gt; : 右移运算符,num &gt;&gt; 1,

    Java中的进制与移位运算符

    Java中的进制与移位运算符 Java中的进制与移位运算符

    Java中的位运算符、移位运算详细介绍

    主要介绍了Java中的位运算符、移位运算,有需要的朋友可以参考一下

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    Java移位运算符详解实例(小结)

    主要介绍了Java移位运算符详解实例(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java三种移位运算符原理解析

    主要介绍了Java三种移位运算符原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    JAVA基础之java的移位运算

    “|”运算符和“&”运算符分别对变量a与b各个对应位的运算得到了变量c和变量d的值。对变量e和f的赋值说明了“^”运算符的功能。字符串数组binary 代表了0到15 对应的二进制的值。在本例中,数组各元素的排列顺序显示...

    移位运算符

    移位运算符

    java中关于移位运算符的demo与总结(推荐)

    下面小编就为大家带来一篇java中关于移位运算符的demo与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java中的移位运算符心得总结

    介绍了java中的移位运算符,有需要的朋友可以参考一下

    Java2入门经典.rar

    Java和Unicode码 本章:小结 参考资源 第二章:程序、数据、变量和计算 数据和变量 变量的命名 变量名和Unicode码 变量和类型 整型数据类型 整型字面值 整型变量的声明 浮点数据类型 浮点字面值 浮点型变量的声明 ...

    java2入门经典.part01

    Java和Unicode码 本章:小结 参考资源 第二章:程序、数据、变量和计算 数据和变量 变量的命名 变量名和Unicode码 变量和类型 整型数据类型 整型字面值 整型变量的声明 浮点数据类型 浮点字面值 浮点型变量的声明 ...

    Java移位运算

    主要讲述Java中移位运算,包括:基本数据类型范围、二进制的概念,移位运算符,基本数据类型与二进制之间的转换等。

    rev3_fe_rakuraku_toppa_java

    4.6移位运算符 4.7赋值运算符 4.8字符串串联运算符 4.9条件运算符?: 4.10比较运算符实例 4.11运算符优先级 章末问题 第五章控制声明 5.1句子类型 5.2 if陈述 5.3开关声明 5.4声明 5.5扩展用于声明 5.6...

    thinkinjava.chm

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    java 编程入门思考

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    Java初学者入门教学

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    java联想(中文)

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

Global site tag (gtag.js) - Google Analytics