美文网首页
位运算中的~ & | ^以及左移右移

位运算中的~ & | ^以及左移右移

作者: 逝去丶浅秋 | 来源:发表于2020-05-22 16:38 被阅读0次
一、位运算

位运算:程序中的所有数在计算机中都是以二进制的形式存储的,位运算就是直接对整数在内存中的二进制位进行操作。

二、位运算符的优先级

下面表格中:序号越小优先级越高,结合性是运算符的运算方向。

序号 运算符 结合性
1 [ ] . ( ) (方法调用) 从左向右
2 ! ~ ++ -- +(一元运算) -(一元运算) 从右向左
3 * / % 从左向右
4 + - 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = 从右向左

三、按位与(&)

计算规则:可以把0看出false,把1看出true,只有当都为true时才为true。
即:0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1
1&2=0000 0001 & 0000 0010 =0000 0000 = 0

按位与运算可以判断一个数的奇偶,一个数二进制末位为1则是奇数。也可以做截位操作,根据它的特性,可以将一个数的某些位变为0.

四、按位或(|)

计算规则:可以把0看出false,把1看出true,只要其中一个为true就为true。
即:0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1

五、按位异或(^)

计算规则:可以把0看出false,把1看出true,两者相同则为真,两者不同则为假。
即:0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0

六、按位取反(~)

按位取反就是将0变为1,1变为0.

例如:~1 = ~0001 = 1000

七、左移右移(<<、>>、>>>)

左右移运算符分为有符号和无符号。>>>是无符号右移运算符,也叫逻辑右移。

左移(<<):将各二进制位向左移指定位,左端移除的位被丢弃,右端空出的位用0补充。

左移一位相当于乘以2,左移n位相当于乘以2n

右移(>>):将各二进制位向右移指定位, 左端空出的位,当最高位是0(正数),左边补齐0;当最高位是1(负数),左边补齐1。

正数右移一位相当于除以2,然后商取整。
负数右移一位相当于其绝对值除以2,然后商取整加1再乘以-1。例如:-5>>1 = (5/2 + 1) * (-1) = -3

无符号右移(>>>):无论最高位是0还是1,左边都补齐0。

八、移位操作用处

例如求八位的二进制数,看代码:

public String decimalToBinaryByDisplacement(int n) {
        String str = "";
        for (int i = 7; i >= 0; i--) {
            str +=  n >>> i & 1;
        }
        return str;
}

上述代码中,通过右移来从高位开始获取其二进制位是0还是1,然后通过按位与来将除了末尾的其他位变为0,此代码中是使用1,当八位二进制中各个位中是1的就是1,否则为0,这样就可以得到二进制的字符串形式。

例如:-2的二进制,for循环第一次时-2 >>> 7结果是0000 0001,再&1得到结果是0000 0001,即数字1,这时str = "1";当for循环第二次时,-2 >>> 6结果是0000 0011,再&1时,0000 0011 & 0000 0001的结果是0000 0001,即数字1,这时str = "11",当最后一位时因为-2最后一位时0,所以整体得到0000 0000,即数字0,这时str = "1111 1110" ,这就是-2的八位二进制表达方式。

相关文章

  • 位运算中的~ & | ^以及左移右移

    一、位运算 位运算:程序中的所有数在计算机中都是以二进制的形式存储的,位运算就是直接对整数在内存中的二进制位进行操...

  • 面试精选之位操作问题集锦

    Java 中位运算符有与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>),...

  • 位运算

    Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或...

  • Java 位运算

    本文主要介绍 Java 提供的位运算符:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( ...

  • 位运算的左移、右移

    1.左移位运算符 把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方由于左移是丢弃...

  • 【C语言笔记】<八>源码补码反码及位运算

    源码补码反码 位运算 左移右移 变量存储细节

  • java 三种运算符理解

    >> : 右移运算符;低位移出,符号位不变 << : 左移运算符;高位移出,符号位不变 >>> : 无符号右移; ...

  • 位运算之左移右移运算

    首先我们先看下关于左移右移的Java代码及其结果: 输出结果为:12 注:我们常说的左移右移都是指的是对原数据换算...

  • python学习第二天 基础知识二

    运算符 +、-、、/、//(整除)、*(幂运算符)、%(取余) 输出结果 位运算符 &位与,|位或,左移<<,右移...

  • 位运算——左移右移的正负运算

    规整:位运算,参与运算码为2进制码,补码参与运算。a左移n位 =a*2^n;( 正负数左移,绝对值一致.。例:10...

网友评论

      本文标题:位运算中的~ & | ^以及左移右移

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