zoukankan      html  css  js  c++  java
  • 位运算符

    概述

      位运算符就是直接对二进制进行操作的运算符

    主要有以下几种:

      <<

        左移

        符号位参与移动,空位补0,被移除的最高位舍去。

        一般正数每左移一位相当于原来的值*2

      >>

        右移

        符号位不参与移动

        当为正数,空位补0,;当为负数,空位补1

        一般正数每右移一位相当于原来的值/2

      >>>

        无符号右移

        符号位也参与移动,空位补0,被移除的舍去

    二进制由0和1组成,一般的,0代表false,1代表true,于是按位运算相当于普通的逻辑运算了。

      &

        按位与

      |     

        按位或

      ~   

        按位取反

      ^

        按位异或

        异或有一个特点,就是a^b = c; 则a^c能得到b;b^c = a;

    首先操作的是二进制,是什么形式的二进制呢?

      我们知道java里面数据是用二进制补码的形式存储的,也就是说操作的是数据的二进制补码。

    例子:

    public class TestOperator3 {
        /*
             00000011  3<<
            00001100
            
            00000011  3>>
            00000001
            
            -3
            10000000 00000000 00000000 00000011
            11111111 11111111 11111111 11111100
            11111111 11111111 11111111 11111101
            
            11111111 11111111 11111111 11111101
            011111111 11111111 11111111 1111110
            
            11111110
            11111101
            10000010
            
            
            1代表true,0false
            &
            |
            ^
            ~(!)
            
            00000110 6&3
            00000011
            00000010 2
            
            00000110 6|3
            00000011
            00000111 7
            
            00000110 6^3
            00000011
            00000101 5
            
            注意:位运算符进行运算符号位也参与
            
            00000110 ~6
            11111001 11111000 10000111 -7
        
        
        
        */
        public static void main(String[] args) {
    
            
            /*
            i = 3<<2;
            System.out.println(i);
            i = 3>>1;
            System.out.println(i);
            i = 3>>>1;
            System.out.println(i);
            
            byte i = (byte)(-3>>>1);
            System.out.println(i);
            
            //2147483646
            //2147483646
            System.out.println(0b01111111111111111111111111111110);
            */
            
            
            
            System.out.println(6&3);
            System.out.println(6|3);
            System.out.println(6^3);
            
            System.out.println(~6);
            
            
    
            
        }
    }

    一般按位运算是速率最快的,因为计算机内是使用二进制进行运算的,而位运算直接操作的是二进制。

  • 相关阅读:
    bzoj3653: 谈笑风生
    bzoj1858: [Scoi2010]序列操作
    bzoj1857: [Scoi2010]传送带
    bzoj1856: [Scoi2010]字符串
    bzoj1855: [Scoi2010]股票交易
    bzoj1854: [Scoi2010]游戏
    bzoj1853: [Scoi2010]幸运数字
    斜堆,非旋转treap,替罪羊树
    NOI2003 文本编辑器
    A_star poj2449 k短路
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/10554104.html
Copyright © 2011-2022 走看看