0
点赞
收藏
分享

微信扫一扫

位运算符(未完)


概要

  • ​​概述​​
  • ​​与运算应用​​
  • ​​应用​​
  • ​​和十六进制数进行位运算​​

概述

各个运算符的表示:&(与),|(或),^(异或),~(非/取反)

a

b

~a

a&b

a|b

a^b

1

1

0

1

1

0

0

1

1

0

1

1

0

0

1

0

0

0

  • 与:都为1结果为1
  • 或:有一个为1结果为1
  • 异或:二者不同时结果为1, 其中任意值与0异或值不变,两个相同的数异或为0

与运算应用

一个数与0相与为舍去, 与1相与为保留.
例1:1101 想要变为1100,则舍去后两位.
解:1101 & 1100 = 1100
例2:1111 想要变为1010,则将第2,4位舍去,将1,3位保留
解:1111 & 1010 = 1010

应用

  1. 判断该数为奇数还是偶数
    偶数 : (num & 1) == 0
    奇数 : (num & 1) == 1

和十六进制数进行位运算

看到有些算法求解中,某些二进制数与十六进制数进行位运算该如何理解呢?
​​​一些算法中应用16进制为,其实他们的16进制转换为二进制位都是有规律的.并不是凭空出现的,大部分为了方便特殊二进制的表示.​​​
举个栗子方便理解:

需求:一个数想取出二进制1 的偶数位

想要去偶数位,只需保留偶数位,舍去奇数位即可.
故将该数的偶数位和1相与,奇数位和0相与即可.

如 3427 的二进制为 : ‭1101 0110 0011‬
         &1010 1010 1010
         =1000 0010 0010
1000 0010 0010为所求的值.
只需和1010 1010 1010相与即可.

但平时并不知道想要把多少进行偶数位保留,可以直接和32的1010 1010 … 1010相与即可.但是32的二进制写起来太长,不便书写.故用16进制来表示.为0xaaaaaaaa.

这便是一些算法中应用16进制为,其实他们的16进制转换为二进制位都是有规律的.并不是凭空出现的,大部分为了方便特殊二进制的表示.

  1. 在JDK1.8之后支持二进制的输入.
    格式为:int bin = 0b1001_1111_0000;// 其中的下划线的应用是为了更好的阅读

    public class BinInputTest {
       public static void main(String[] args) {
       int bin = 0b1001_1111;
       System.out.println(bin);
       System.out.println(0b1111_1111);
       }
    }
    输出:
    159
    255 ↩︎


举报

相关推荐

0 条评论