Android之路

导航

Java中的位运算

  在开发中,分析源码时经常会碰到关于位运算的计算,有时总是搞混每个位标志的含义,每次都要重新查找。因此,我将常见的几个运算符进行下述总结:

       声明:该随笔仅作为自己平常的笔记所用,若想查看Java运算符详细介绍的请移步文章末尾链接3.

一、常见的位运算符:

1、需要注意的是:以下针对的都是值转换为二进制后的规则。

&:都为1,才为1,否则为0
|:两个位只要有一个为1,那么结果就是1,否则就为0
~:如果位为0,结果是1,如果位为1,结果是0
^:两个操作数中,相同则结果为0,不同则结果为1---异或
例如:

int result = 6&5;  ----->
 6---> 0110
 5---> 0101
因此,6&5值为0100--->4
result = 4;

2、关于异或运算:(^)

  异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。

    (1)使用场景:

  •  按照上述特性,可实现两个变量的互换,而不借助第三个变量。
  •  数据的简单加密解密。


   (2)实现a、b互换,可作如下操作:
            newa = a^(a^b)        //newa与b的值相同
            newb = b^(a^b)        //newb与a的值相同

二、移位运算符:

>>>= :无符号右移. 右移赋值,最高位补0
<<= : 左移赋值
UL:无符号长整型
>>>:无符号右移,针对无符号数(非负数)两者并无区别。
>>:右移

关于无符号的移位运算,仅包括右移,而没有左移(即<<<)

三、其他推荐:

1、原码、反码、补码详解:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

2、Java中无符号类型的简写及详细介绍:https://blog.csdn.net/langzi7758521/article/details/51853298

3、最近发现的,挺详细的Java运算符:http://tryenough.com/java-operator

 

posted on 2019-06-21 17:34  Android之路  阅读(382)  评论(0编辑  收藏  举报