Java中的位运算,说实话,工作了两年的时间里,从来没有用过一次,因为平时都是些的是业务代码,很少接触比较底层的东西,我记得第一次在代码中看到还是在HashMap的Hash算法中看到的,这次重拾Java基础,着重理解了一下Java中的位运算,计算机中的运算一般都是操作反码进行运算,操作完成之后,再将结果的反码转化成原码,然后将二进制的结果转化成十进制输出出来,其实乘法和除法运算在计算机中都是通过位运算进行的,所以我觉得这部分应该好好整理一下,以下内容都是传智播客的Java基础中的讲解视频还有一些是讲解的课件、笔记中的内容,在此声明。

运算符

运算

位运算符的细节

<<

左移

空位补0,被移除的高位丢失

>>

右移

被移位的二进制最高位是0,右移后,空缺位补0,最高位是1,最高位补1

>>>

无符号右移

被移位二进制无论是0或者1,空缺位都是用0补

&

与运算

任何二进制位和0进行&运算,结果都是0,和1进行&运算,都是原值

|

或运算

任何二进制位和0进行|运算,结果都是原值,和1进行|运算,都是1

^

异或运算

任何相同二进制位进行^运算,结果都是0,不同二进制位进行^运算,结果都是1

~

反码

注意:

<

>>:右移稍微复杂一点,如果最高位是0,左边被移空的位就填入0,如果高位是1,左边被移空的位就填入1,相当于除以2的倍数

>>>:无论最高位是1还是0,左边被移空的高位都填入0

Java中运算符的优先级:(图片来源网路)

代码演示各种位运算:

1 /*

2 要做位运算,首先要把数据转换为二进制。3 */

4 public static voidmain(String[] args) {5 //&,|,^,~

6 int a = 3;7 int b = 4;8

9 System.out.println(3 & 4);10 System.out.println(3 | 4);11 System.out.println(3 ^ 4);12 System.out.println(~3);13

14 }

代码分析解读:

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11

00000000 00000000 00000000 00000011

4的二进制:100

00000000 00000000 00000000 00000100

&位与运算:有0则0。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

结果是:0

|位或运算:有1则1。

00000000 00000000 00000000 00000011

|00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

^位异或运算:相同则0,不同则1。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

~按位取反运算符:0变1,1变0

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (补码)

补码:11111111 11111111 11111111 11111100

反码:11111111 11111111 11111111 11111011

原码:10000000 00000000 00000000 00000100

结果是:-4

^异或运算的特点:

1 /*

2 ^的特点:一个数据对另一个数据位异或两次,该数本身不变。3 */

4 public static voidmain(String[] args) {5 int a = 10;6 int b = 20;7

8 System.out.println(a ^ b ^ b); //10

9 System.out.println(a ^ b ^ a); //20

10 }

1 /*

2 <<:>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐14 >>>:无符号右移 无论最高位是0还是1,左边补齐05

6 面试题:7 请用最有效率的方式写出计算2乘以8的结果?8 2 * 89 2 << 310 */

11 public static voidmain(String[] args) {12 //<< 把<

13 System.out.println(3 << 2); //3*2^2 = 3*4 = 12;14

15 //>> 把>>左边的数据除以2的移动次幂

16 System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6

17 System.out.println(24 >>> 2);18

19 System.out.println(-24 >> 2);20 System.out.println(-24 >>> 2);21 }

代码分析解读(32位):

计算出3的二进制:11

00000000 00000000 00000000 00000011

(00)000000 00000000 00000000 0000001100

>>(右移)的移动:

计算出-24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

1111111111 11111111 11111111 111010(00) 补码

补码:1111111111 11111111 11111111 111010

反码:1111111111 11111111 11111111 111001

原码:1000000000 00000000 00000000 000110

结果:-6

>>>(无符号右移)的移动:

计算出-24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

结果:1073741818

位运算java_Java中的位运算相关推荐

  1. java实现次方的运算_Java中对于位运算的优化以及运用与思考

    引言 随着JDK的发展以及JIT的不断优化,我们很多时候都可以写读起来易读但是看上去性能不高的代码了,编译器会帮我们优化代码.之前大学里面学单片机的时候,由于内存以及处理器性能都极其有限(可能很多时候 ...

  2. java取余位运算_Java中对于位运算的优化以及运用与思考

    引言 随着JDK的发展以及JIT的不断优化,我们很多时候都可以写读起来易读但是看上去性能不高的代码了,编译器会帮我们优化代码.之前大学里面学单片机的时候,由于内存以及处理器性能都极其有限(可能很多时候 ...

  3. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...

    java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...

  4. java 负数 位移运算_Java中的位移运算

    在Java中,位移运算属于基本运算,符号是<>,即向左位移和向右位移.在Java中只有整数才能位移,所以其他的不考虑,位移运算是将整数在内存中表示的二进制进行位移,所以在Java中分为正数 ...

  5. 64位 gnuwin32_linux系统中32位和64位的区别?

    通称说 x86也是指 IA32构架CPU,也就是说cpu是32位的,只能安装32位的os了:而x86-64或者IA-64是说cpu支持64位,可以安装64位的os,跑64位的应用 不懂可以看如下总结 ...

  6. python怎么进行分数运算_Python中的分数运算

    Python中的分数运算,在Python标准库fractions中的Fraction对象支持分数运算.具体操作如下: 在windows下,通过cmd进到dos shell,输入python3进入到py ...

  7. byte与或运算 java_java中byte转换int时为何与0xff进行与运算

    本文总结了java中byte转换int时总是与0xff进行与运算的原因. 在剖析该问题前请看如下代码: public static String bytes2HexString(byte[] b) { ...

  8. java补码运算_java中的补码运算

    public class Test2_8 { /* 补码运算 * 在计算机中,数值一率采用补码来运算,如:5-3实例上是5+(-3); * 正数与负数的关系:取反再加1 * */ public sta ...

  9. python中的除法运算_python中矩阵除法运算的三种实现方法

    介绍过python矩阵的乘法运算,numpy库中虽然乘法是矩阵运算的主要运算,但是numpy作为python中实现矩阵运算的好工具,也是可以轻松实现除法计算的,本文python中矩阵除法的三种实现方法 ...

最新文章

  1. Leetcode69场双周赛-第一题5960:标题首字母大写
  2. HDU 2066 一个人的旅行
  3. 精心整理吐血推荐的AUTOSAR科普介绍材料
  4. 高频算法面试题(字符串) 242. 有效的字母异位词
  5. FFmpeg--命令详解
  6. 设置RadioButton控件中文本的位置.
  7. 企业文件存储服务器规划,企业文件存储服务器
  8. linux内存管理(十二)-直接页面回收
  9. 水利水电工程与计算机技术应用,水利水电施工中计算机的应用
  10. 4月27日--28日课堂内容
  11. Android 图标上面添加提醒(一)使用Canvas绘制
  12. HTML仿网易云音乐首页静态,用 Vue.js 模仿一个简单的网易云音乐
  13. 程序员深度学习!mysql客户端工具免费绿色版
  14. mysql 嵌套查询优化
  15. 我的团长我的团 原著小说 文字版
  16. 基于相似性网络融合的目标分类研究
  17. java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission
  18. 作业二:wireshark抓包与ping操作
  19. 第七史诗无限显示服务器连接中,第七史诗神器满破是什么意思?神器满破攻略...
  20. 服务器虚拟机移动,从物理服务器迁移到虚拟机的两大方案

热门文章

  1. 290种零食大统计,谁能唤起80、90后的童年回忆?|数据会说话
  2. 写给程序员的裁员防身指南
  3. C++和Lua交互教程(基于LuaBridge)
  4. c语言水仙花数(输入判断),用c语言判断一个数是否为水仙花数?
  5. neon浮点运算_ARM 浮点运算详解
  6. hpsocket java代码_HPSocket介绍与使用
  7. python变量使用前必须先声明、并且一旦声明_初学者学习Python的30天‍-第18天-文件处理...
  8. echarts 折线图 html模板,设置ECharts折线图的提示框
  9. IntelliJ IDEA 导入项目后出现非法字符解决方法
  10. 使用Navicat Premium 12 连接远程Oracle数据库