位运算java_Java中的位运算
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中的位运算相关推荐
- java实现次方的运算_Java中对于位运算的优化以及运用与思考
引言 随着JDK的发展以及JIT的不断优化,我们很多时候都可以写读起来易读但是看上去性能不高的代码了,编译器会帮我们优化代码.之前大学里面学单片机的时候,由于内存以及处理器性能都极其有限(可能很多时候 ...
- java取余位运算_Java中对于位运算的优化以及运用与思考
引言 随着JDK的发展以及JIT的不断优化,我们很多时候都可以写读起来易读但是看上去性能不高的代码了,编译器会帮我们优化代码.之前大学里面学单片机的时候,由于内存以及处理器性能都极其有限(可能很多时候 ...
- java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...
- java 负数 位移运算_Java中的位移运算
在Java中,位移运算属于基本运算,符号是<>,即向左位移和向右位移.在Java中只有整数才能位移,所以其他的不考虑,位移运算是将整数在内存中表示的二进制进行位移,所以在Java中分为正数 ...
- 64位 gnuwin32_linux系统中32位和64位的区别?
通称说 x86也是指 IA32构架CPU,也就是说cpu是32位的,只能安装32位的os了:而x86-64或者IA-64是说cpu支持64位,可以安装64位的os,跑64位的应用 不懂可以看如下总结 ...
- python怎么进行分数运算_Python中的分数运算
Python中的分数运算,在Python标准库fractions中的Fraction对象支持分数运算.具体操作如下: 在windows下,通过cmd进到dos shell,输入python3进入到py ...
- byte与或运算 java_java中byte转换int时为何与0xff进行与运算
本文总结了java中byte转换int时总是与0xff进行与运算的原因. 在剖析该问题前请看如下代码: public static String bytes2HexString(byte[] b) { ...
- java补码运算_java中的补码运算
public class Test2_8 { /* 补码运算 * 在计算机中,数值一率采用补码来运算,如:5-3实例上是5+(-3); * 正数与负数的关系:取反再加1 * */ public sta ...
- python中的除法运算_python中矩阵除法运算的三种实现方法
介绍过python矩阵的乘法运算,numpy库中虽然乘法是矩阵运算的主要运算,但是numpy作为python中实现矩阵运算的好工具,也是可以轻松实现除法计算的,本文python中矩阵除法的三种实现方法 ...
最新文章
- Leetcode69场双周赛-第一题5960:标题首字母大写
- HDU 2066 一个人的旅行
- 精心整理吐血推荐的AUTOSAR科普介绍材料
- 高频算法面试题(字符串) 242. 有效的字母异位词
- FFmpeg--命令详解
- 设置RadioButton控件中文本的位置.
- 企业文件存储服务器规划,企业文件存储服务器
- linux内存管理(十二)-直接页面回收
- 水利水电工程与计算机技术应用,水利水电施工中计算机的应用
- 4月27日--28日课堂内容
- Android 图标上面添加提醒(一)使用Canvas绘制
- HTML仿网易云音乐首页静态,用 Vue.js 模仿一个简单的网易云音乐
- 程序员深度学习!mysql客户端工具免费绿色版
- mysql 嵌套查询优化
- 我的团长我的团 原著小说 文字版
- 基于相似性网络融合的目标分类研究
- java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission
- 作业二:wireshark抓包与ping操作
- 第七史诗无限显示服务器连接中,第七史诗神器满破是什么意思?神器满破攻略...
- 服务器虚拟机移动,从物理服务器迁移到虚拟机的两大方案
热门文章
- 290种零食大统计,谁能唤起80、90后的童年回忆?|数据会说话
- 写给程序员的裁员防身指南
- C++和Lua交互教程(基于LuaBridge)
- c语言水仙花数(输入判断),用c语言判断一个数是否为水仙花数?
- neon浮点运算_ARM 浮点运算详解
- hpsocket java代码_HPSocket介绍与使用
- python变量使用前必须先声明、并且一旦声明_初学者学习Python的30天-第18天-文件处理...
- echarts 折线图 html模板,设置ECharts折线图的提示框
- IntelliJ IDEA 导入项目后出现非法字符解决方法
- 使用Navicat Premium 12 连接远程Oracle数据库