Javaビットマスクの制御権限と(&)または(~)>の紹介


1.javaビットマスク
javaビットマスクは、java開発ではマスクを使う場面が少ないですが、システムではあるオブジェクトに何らかの権限があるかどうかを判断する必要がある場合、ビットマスクで行うことができます。
ビットマスクは、主に、ビット演算、例えば(&)、非(~)、または(|)、排他的(^^)、シフト(<<>)などにより、権限判定機能を実現する。
1.1簡単に次の演算子を紹介します。(計算はすべてバイナリ計算です。)
  • <:左移動演算子、num<<1、numに相当します。2
  • を掛けます。
  • >:右移動演算子、num>>1は、numで2
  • で割るのに相当します。
  • >>:符号なしで右に移動し、符号ビットを無視し、空席は0で
  • に補完されます。
  • 异或(^^):一言で言えば、本当にbootleanに戻ります。
  • と(&):両方とも1が本物で、0001&0101つまり0001
  • です。
  • または(124):二人が本物である限り、0001 1240、つまり0101
  • です。
  • 非(~):自己に対して反を取る。
  •     特に演算ではないので、ネット上の大神の説明を引用します。Javaでは、すべてのデータの表示方法は補数で表されています。特別な説明がなければ、Javaのデータタイプはデフォルトでintです。intデータタイプの長さは8ビットで、1ビットは4バイトで、32バイトです。
        例えば:~37
        37バイナリに変換すると100101です。
        補数後:0000 0000 0000 00001
        逆をとる:   11111111 11111111 11111111 11010
        上位が1なので、原コードはマイナス、負の補数はその絶対値の原コードは逆、末尾にもう1を加算します。
        したがって、この2進数の補数を還元することができます。まず、末尾は1を減算する逆コードです。11111111 11111111 11111011001の次に、各コードを逆取得します。
    0000010,000,000,001,010,バイナリ変換元のコードは38です。
        だから~37=-38.
    2.ビットマスク制御権限
    一つのシステムにおいて、ユーザが照会、新規作成、修正、削除の4つの権限をマスクで制御し、これらの権限を判断すると仮定する。
    コードの実装:
    
    package com.us.basics;
    /**
     * Created by yangyibo on 17/12/11.
     *         ,           0   16          16      。
     */
    public class BitMask {
      public static int ADD = 1 << 0; //1*2 0        0001
      public static int DELETE = 1 << 1; //1*2 1        0010
      public static int UPDATE = 1 << 2; //1*2 2        0100
      public static int SELECT = 1 << 3; //1*2 3        1000
      //     
      private int currentStatus;
      BitMask(int currentStatus) {
        this.currentStatus = currentStatus;
      }
      /**
       *                 
       * @param more
       * @return
       */
      private BitMask append(int more) {
        currentStatus = currentStatus | more;
        return this;
      }
      /**
       *                         
       * @param more
       * @return
       */
      private BitMask delete(int more) {
        //          ,       (-)       
        // currentStatus = currentStatus - more;
        currentStatus &= ~more;
        return this;
      }
      /**
       *                 
       * @param more
       * @return
       */
      private boolean isPermission(int more) {
        return (currentStatus & more) > 0 ;
      }
      public static void main(String[] args) {
        BitMask bk = new BitMask(BitMask.DELETE);
        //    
        bk.append(BitMask.ADD).append(BitMask.UPDATE);
        bk.delete(BitMask.ADD);
        //       ADD     
        System.out.println(bk.isPermission(BitMask.ADD));
        test1();
      }
      /**
       *    
       */
      public static void test1() {
        int a =5; //0101
        int b =6; //0110
        System.out.println(a&b); //    0100   4
      }
      /**
       *    
       */
      public static void test2() {
        int a =5; //0101
        int b =6; //0110
        System.out.println(a|b); //     0111   7
      }
      /**
       *            a     b
       * ~5   5   ,      0101 ,    ,     。     1010 ,     1     ,      ,                0101 ,    +1 0110    -6
       *       ,        +1     
       */
      public static void test3() {
        int a =5; //0101
        System.out.println(~a); //     -6
      }
    }
    本論文のソースコード:
    https://github.com/527515025/JavaTest/blob/master/src/main/java/com/us/basics/BitMask.java
    締め括りをつける
    以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。もっと知りたいなら、下のリンクを見てください。