位运算

Posted 知识源于分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算相关的知识,希望对你有一定的参考价值。

1、位运算

1.1、二进制打印

private static void print(int num) 
  // 1 << i意味着只有第i位置上的是1,其他位都是0
  // num & 一个只有i位置上是1的,除了这个位置上的,其他位都一定会变成0;那如果最终都是0,则表示这个位置上是没有占位的,而不是0,则表示有占位
  for (int i = 31; i >= 0; i--) 
    System.out.print((num & (1 << i)) == 0 ? "0" : "1");
  
  System.out.println( "\\n" + num);

1.2、反码

1.2.1 正数:原码

1.2.2 负数:符号位除外,其他位置取反

1.3、补码

1.3.1、正数:原码

1.3.2、负数:反码+1

1.3.3、 取反后+1,得出相反数。无论正数还是负数

1.4、证明算数运算并非我们理解的10进制运算

jshell> Integer.MAX_VALUE+1
$81 ==> -2147483648
jshell> Integer.MIN_VALUE-1
$82 ==> 2147483647

1.5 常见的位运算

1.5.1 &,按位与。同为1则1,否则0

1.5.2 | ,按位或。有一个1则1,否则0

1.5.3 ^ ,按位异或。有一个1则1,否则0

1.5.4 ~,按位取反(包含符号位)。

个人理解是就像是一个x轴的左右两边,右边代表正数(含0),左边代表负数。一一对应。0对-1,1对-2,2对-3,3对-4,4对-5,5对-6。相反数取值逻辑取反+1

jshell> ~5
$10 ==> -6

jshell> Integer.toBinaryString(-6)
$11 ==> "11111111111111111111111111111010"

jshell> Integer.toBinaryString(5)
$12 ==> "101"

 

以上是关于位运算的主要内容,如果未能解决你的问题,请参考以下文章

位运算和enum中的位运算

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字

Java位运算:位异或运算位与运算位或运算位取反运算左位移运算右位移运算无符号右移运算不用额外变量交换两个整数的值(使用位异或运算)只出现一次的数字

位运算

位运算计算与位运算应用

Python 基础1 - 位运算符