美文网首页java
java中的位运算

java中的位运算

作者: suxin1932 | 来源:发表于2020-02-14 14:05 被阅读0次

1.概述

1.1 存储单位的基本换算公式

>> bit:位
一个二进制数据0或1,是1bit;
>> byte:字节
存储空间的基本计量单位
一个英文字符占一个字节 (UTF-8);
一个汉字占2个字节 (UTF-8);

#基本换算公式
1 byte = 8 bit

1.2 支持的数据类型

Java中的位运算是针对整型的数据类型进行运算的,所以操作数必须是一下五种之一。
数据类型    所占位数(bit)
byte        8
short       16
int         32
long        64
char        16

1.3 数据存储方式

计算机中存储的数据最终是以二进制存储,
>> int类型的十进制数字10表示为32bit的二进制:
0000 0000 0000 0000 0000 0000 0000 1010
>> byte类型的十进制数字10表示为32bit的二进制:
0000 1010

2.位运算

位运算符

运算符     意义
&       按位与
|       按位或
~       按位非
^       按位异或
<<      左移
>>      右移
>>>     无符号右移

2.1 按位与&

操作      十进制         二进制     
操作数1    3           0 0 1 1
操作数2    5           0 1 0 1
& 后结果   1           0 0 0 1


总结:对应位同为1时,才为1,否则全为0(对应位只要有0,全为0,否则为1)。

另外:可以把1理解为true,把0理解为false, true和false进行与(&)时,必须同为true时结果才为true.

2.2 按位或 |

操作      十进制         二进制     
操作数1    3           0 0 1 1
操作数2    5           0 1 0 1
| 后结果   7           0 1 1 1


总结:对应位只要有1时,即为1,否则全为0(对应位只有全是0时,结果才是0,否则为1)。

另外:可以把1理解为true,把0理解为false, true和false进行或(|)时,只要有true,结果即为true。

2.3 按位非~

操作      十进制         二进制     
操作数1    3           0 0 1 1
~ 后结果   12          1 1 0 0


总结:对每位进行取反。

2.4 按位异或 ^

操作      十进制         二进制     
操作数1    3           0 0 1 1
操作数2    5           0 1 0 1
^ 后结果   7           0 1 1 0


总结:只要对应为不同即为1

2.5 左移<< 和 右移 >>

1.左移总结 (m << n)
1) 在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方。
2) 溢出情况举例:5<<29,相当于 (2^2 + 1) * 2^29 ,
这个结果显然大于正数的最大值 2^31-1,所以得出的是个负数。

2.右移总结 (m >> n)
1) 即相当于m除以2的n次方,得到的为整数时,即为结果。
2) 如果结果为小数,此时会出现两种情况:
>> 如果m为正数,得到的商会无条件 的舍弃小数位;
>> 如果m为负数,舍弃小数部分,然后把整数部分加+1得到位移后的值。
左移&右移.png

2.6 无符号右移 >>>

无符号右移(>>>) 与 右移(>>)的区别就是无论操作数是正数还是负数,高位都是补0。

参考资源
https://segmentfault.com/a/1190000018485946

相关文章

  • Java 中的位运算

    预备知识 原码 : 符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。 反码 : 正数的反码是其本身;...

  • Java中的位运算

    无整理 不简书 Java中的位运算符有 &(与),|(或),~(非),^(异或),>>(有符号右移),<<(左移)...

  • Java中的位运算

    前言 在阅读原码的过程中会看到大量的>>, <<, ^, &, |等运算操作符,我们必须先明白这些运算符的意思才能...

  • java中的位运算

    1.概述 1.1 存储单位的基本换算公式 1.2 支持的数据类型 1.3 数据存储方式 2.位运算 位运算符 2....

  • Java面试

    Java中Synchronized的用法Java面试准备Java HashMap 源码解析Java 位运算(移位、...

  • Java的运算符

    Java有4大类运算符:算术运算、位运算、关系运算和逻辑运算。 运算符的优先级 模运算符 Java中,模运算符不止...

  • Java 1.7 ConcurrentHashMap()

    位运算 位运算在Java中很常见, 比如说异或等, 在HashMap和ConcurrentHashMap中也有用到...

  • Java位运算及HashMap的tableSizeFor方法

    JAVA 位运算基础 首先在进行位运算之前先讲一下JAVA 的基础知识点(可跳过): 首先java中的一个int ...

  • 算法整理(1) 位运算相关

    运算符 位运算符用来对二进制位进行操作,Java中提供了如下的位运算符:位运算符中,除 ~ 以外,其余均为二元运算...

  • java中位运算技巧

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。 运算符 含义 描述 【&】 按位与 如果两个...

网友评论

    本文标题:java中的位运算

    本文链接:https://www.haomeiwen.com/subject/hjidfhtx.html