位运算符和逻辑位运算符

public class Demo4 
{
   public static void main(String[] args){
      /*
       5.位运算符:
         用于操作数值的二进制位
         1>移动位运算符:
           对数值的二进制位进行移动操作的
           1)左移:
           <<
           6<<1:6左移1位
           00000000 00000000 00000000 00000110
           0000000 00000000 00000000 000001100 --> 12

           6<<2:
           00000000 00000000 00000000 00000110
           000000 00000000 00000000 0000011000 -- 24
           
           一个数左移几位就是该数的二进制数最高位去除几位末位就补几个0;
           左移是在进行升位操作,每左移一位就是升了一位,就乘一次2,那么某个
           数向左移动几位就是乘以几次2,简单说就是某个左移几位就是乘以2的
           几次方;

           8<<2 ---> 32
           7<<3 ---> 56

           2)右移:
           >>(右移):
           16>>1:16右移1位
           00000000 00000000 00000000 00010000
           000000000 00000000 00000000 0001000 --->8

           16>>2:
           00000000 00000000 00000000 00010000
           0000000000 00000000 00000000 000100 ---> 4
           一个数右移几位就是该数的二进制数末位去除几位,高位进行补位,高位
           原来是几就补几(目的保证数值的正负不变);右移是在进行降位,每右移
           一位就是降了一位,就除以一次2,那么某个数向右移动几位就是该数除以
           2的几次方;

           24>>3 ---> 3
           56>>4 ---> 3
           -56>>2 --> -56/2^2 = -14

//        -56 = 32 + 16 + 8
//        10000000 00000000 00000000 00111000 二进制补码
//        10000000 00000000 00000000 00110111 反码第一步
//        11111111 11111111 11111111 11001000 反码
//        11111111 11111111 11111111 11110010 向右移两位
//        10000000 00000000 00000000 00001101 反码
//        10000000 00000000 00000000 00001110 补码
//                结果为-14

           >>>(无符号右移):
           一个数右移几位就是该数的二进制数末位去除几位,高位进行补位,低位去除
           几位高位就补几0(目的保证数值的最终都是正负):
           
           -56>>>2:-56无符号右移两位
           10000000 00000000 00000000 00111000
           11111111 11111111 11111111 11000111
           0011111111 11111111 11111111 111110 --> 1073741810

         2>逻辑位运算符:
           就是使用& | ^的逻辑特性来操作数值的二进制位:
           
           7&2:
           0111
          &0010
          ------
           0010 ---> 2
           
           7|2:
           0111
          |0010
          ------
           0111 ---> 7

           7^2:
           0111
          ^0010
          -----
           0101 ---> 5
         3>取反:~
           某个数取反就是该数的相反数再-1
      */
       System.out.println(6<<1);
       System.out.println(24>>3);
       System.out.println(56>>4);
       System.out.println(-56>>2);
       System.out.println(-56>>>2);//1073741810
       System.out.println(7&2);
       System.out.println(7|2);
       System.out.println(7^2);
       System.out.println(~6);//-7
       System.out.println(~-7);//6
   }
}
 

猜你喜欢

转载自blog.csdn.net/weixin_38167703/article/details/82972325