JAVA基础之位运算符

简介: 位运算(位指的是二进制位或者是bit位)计算机中所有的计算到计算机底层中都会变成位运算(就是二进制位的运算)。位运算可以提高程序的效率!学习JDK源码的过程中发现很多地方都用到位运算,比如HashMap在中计算key应该放在那个hash桶位置时就用到了位运算。

位运算(位指的是二进制位或者是bit位)

计算机中所有的计算到计算机底层中都会变成位运算(就是二进制位的运算)。位运算可以提高程序的效率!学习JDK源码的过程中发现很多地方都用到位运算,比如HashMap在中计算key应该放在那个hash桶位置时就用到了位运算。

有符号数

有符号数由两部分组成:

1.符号位(二进制的最左边的一位表示符号位,0表示正数,1表示负数)

2.数值位

3.计算机中存储有符号数据的时候时按照补码形式存进去的。

正数的原码、反码、补码都一样

原码

就是符号位+数值位(数据的绝对值)

反码

就是符号位不变,其它位全部1变0,0变1

补码

在反码的基础上+1生成补码

例如:+7

原码:0b000000000000000000000000000000111

反码:0b000000000000000000000000000000111

补码:0b000000000000000000000000000000111

例如:-7

原码:0b100000000000000000000000000000111

反码:0b111111111111111111111111111111000(除符号位不变,其它1变0,0变1)

补码:0b111111111111111111111111111111001 反码+1生成补码

如何把补码转换成原码

补码-1得到反码,反码再取反得到就是原码(符号位不变)

位运算符号种类

&:按位与

| :按位或

^:按位异或

~ :按位取反

<<: 左移

>>: 右移

>>>:无符号右移

注意:进行位运算的时候所有的操作数全部都是二进制,并且时补码

按位与

规则:两个同为1的时候才为1,属于双目运算符

例如

3的二进制   :00000000000000000000000000000011

4的二进制   :00000000000000000000000000000100

3和4按位与 :00000000000000000000000000000000

按位与后的结果位0

按位或

规则:两个中只要有一个为1,就为1,属于双目运算符

3的二进制   :00000000000000000000000000000011

4的二进制   :00000000000000000000000000000100

3和4按位与 :00000000000000000000000000000111

按位或后的结果位7

按位异或

规则:两个不一样的时候才为1,如果一样就为0,属于双目运算符

按位取反

例如3的二进制:0b00000000000000000000000000000011

取反后的结果:  0b11111111111111111111111111111100   这个是补码

补码-1后获取反码:

补码: 0b1111111111111111111111111111100

-         1

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

0b1111111111111111111111111111011

反码取反获取原码

0b1000000000000000000000000000100

左移

让操作数乘以2的n次幂,n是移动的位数

格式:

操作数<<往左移动的位数

右移

让操作数除以2的n次幂,n是移动的位数

格式:

操作数>>往右移动的位数

无符号右移

无符号右移也是操作数除以2的n次幂

无符号右移和右移区别:右移操作后,左边会空出位置来,空位置用改操作数的符号位置的数补全;无符号右移,左边空出来的位置全部用补全。

相关文章
|
7月前
|
Java 程序员
Java基础之原码,反码,补码,位运算符
Java基础之原码,反码,补码,位运算符
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
83 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
6月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
174 2
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
3月前
|
存储 Java 测试技术
Java零基础(22) - Java位运算符,了解一下!
【9月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
48 5
|
4月前
|
存储 Java 编译器
java的7种位运算符
java的7种位运算符
82 15
|
6月前
|
安全 Java
|
5月前
|
算法 Java 测试技术
day13:Java零基础-位运算符
【7月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
42 0
|
6月前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
54 4
|
7月前
|
存储 Java 程序员
Java中的位运算符详解
Java中的位运算符详解
122 1