麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開發(fā) > Java > 正文

Java位掩碼控制權(quán)限與(&)或(|)非(~)、>的介紹

2024-07-14 08:43:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1. java 位掩碼

java 位掩碼,在java開發(fā)中很少有場(chǎng)景會(huì)用到掩碼,但是當(dāng)系統(tǒng)中需要判斷某個(gè)對(duì)象是否有 某些權(quán)限時(shí),可以通過位掩碼來(lái)做。

位掩碼 主要通過位運(yùn)算,例如與(&)、非(~)、或(|)、異或(^)、移位(<<和>>)等來(lái)實(shí)現(xiàn) 權(quán)限判斷功能。

1.1 簡(jiǎn)單介紹一下位運(yùn)算符(計(jì)算均為二進(jìn)制計(jì)算)

  • << : 左移運(yùn)算符,num << 1,相當(dāng)于num乘以2
  • >> : 右移運(yùn)算符,num >> 1,相當(dāng)于num除以2
  • >>> : 無(wú)符號(hào)右移,忽略符號(hào)位,空位都以0補(bǔ)齊
  • 異或(^ ): 一句話,相異為真 返回 boolean
  • 與(&): 只有兩位都為 1 則為真 ,0001 & 0101 也就是 0001
  • 或(|): 只要兩位有一位 為真則為真, 0001 | 0100,也就是0101
  • 非(~): 對(duì)自身取反。

    注意 非運(yùn)算比較特殊 引用網(wǎng)上大神的解釋(如果看不懂就去翻翻計(jì)算機(jī)組成原理)在Java中,所有數(shù)據(jù)的表示方法都是以補(bǔ)碼的形式表示,如果沒有特殊說(shuō)明,Java中的數(shù)據(jù)類型默認(rèn)是int,int數(shù)據(jù)類型的長(zhǎng)度是8位,一位是四個(gè)字節(jié),就是32字節(jié),32bit.
    比如:~37
    37 轉(zhuǎn)為二進(jìn)制是100101

    補(bǔ)碼后為: 00000000 00000000 00000000 00100101
    取反為:   11111111 11111111 11111111 11011010

    因?yàn)楦呶皇?,所以原碼為負(fù)數(shù),負(fù)數(shù)的補(bǔ)碼是其絕對(duì)值的原碼取反,末尾再加1。
    因此,我們可將這個(gè)二進(jìn)制數(shù)的補(bǔ)碼進(jìn)行還原: 首先,末尾減1得反碼:11111111 11111111 11111111 11011001 其次,將各位取反得原碼:
00000000 00000000 00000000 00100110,此時(shí)二進(jìn)制轉(zhuǎn)原碼為38
    所以~37 = -38.

2. 位掩碼控制權(quán)限

假設(shè) 在一個(gè)系統(tǒng)中,用戶有查詢(Select)、新增(Insert)、修改(Update)、刪除(Selete)四種權(quán)限使用掩碼 來(lái)控制和判斷這些權(quán)限。

代碼實(shí)現(xiàn):

package com.us.basics;/** * Created by yangyibo on 17/12/11. * 使用位掩碼的方式,只需要用一個(gè)大于或等于0且小于16的整數(shù)即可表示所有的16種權(quán)限的狀態(tài)。 */public class BitMask {  public static int ADD = 1 << 0; //1*2的0次方 的二進(jìn)制 0001  public static int DELETE = 1 << 1; //1*2的1次方 的二進(jìn)制 0010  public static int UPDATE = 1 << 2; //1*2的2次方 的二進(jìn)制 0100  public static int SELECT = 1 << 3; //1*2的3次方 的二進(jìn)制 1000  // 當(dāng)前狀態(tài)  private int currentStatus;  BitMask(int currentStatus) {    this.currentStatus = currentStatus;  }  /**   * 添加某個(gè)操作權(quán)限 通過或操作實(shí)現(xiàn)   * @param more   * @return   */  private BitMask append(int more) {    currentStatus = currentStatus | more;    return this;  }  /**   * 除去某個(gè)操作權(quán)限 通過非操作 和 與操作共同實(shí)現(xiàn)   * @param more   * @return   */  private BitMask delete(int more) {    // 如果非操作不好理解,可以理解為 減(-)操作也是可以的    // currentStatus = currentStatus - more;    currentStatus &= ~more;    return this;  }  /**   * 是否擁有某個(gè)權(quán)限 通過與運(yùn)算判斷   * @param more   * @return   */  private boolean isPermission(int more) {    return (currentStatus & more) > 0 ;  }  public static void main(String[] args) {    BitMask bk = new BitMask(BitMask.DELETE);    //添加權(quán)限    bk.append(BitMask.ADD).append(BitMask.UPDATE);    bk.delete(BitMask.ADD);    // 判斷是否有 ADD 操作權(quán)限    System.out.println(bk.isPermission(BitMask.ADD));    test1();  }  /**   * 測(cè)試與   */  public static void test1() {    int a =5; //0101    int b =6; //0110    System.out.println(a&b); //輸出為 0100 為 4  }  /**   * 測(cè)試或   */  public static void test2() {    int a =5; //0101    int b =6; //0110    System.out.println(a|b); // 輸出為 0111 為 7  }  /**   * 測(cè)試非 可以理解為從 a 中減去 b   * ~5 取 5的補(bǔ)碼,正數(shù)的補(bǔ)碼 0101 ,為絕對(duì)值,其余位補(bǔ)零。然后取反 1010 ,最高位為 1 則為負(fù)數(shù),然后取其補(bǔ)碼,負(fù)數(shù)的補(bǔ)碼是其絕對(duì)值的原碼取反 0101 ,然后末尾+1 0110 所以為-6   * 非操作比較繞,可以理解為絕對(duì)值+1 并取負(fù)數(shù)   */  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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费观看的毛片手机视频 | 久久久成人精品视频 | 免费高潮在线国 | av成人免费观看 | 一本一本久久a久久精品综合小说 | 国产精品自拍99 | 黄色网址免费在线 | 国产 一区 精品 | 欧美性猛交一区二区三区精品 | 成人综合区一区 | 中文字幕天堂在线 | 黄片毛片一级 | 久久国产在线观看 | 免费一级特黄毛片 | 亚洲午夜不卡 | 日韩毛片网站 | 免费黄色短视频网站 | 蜜桃一本色道久久综合亚洲精品冫 | 成av人在线观看 | 国内精品久久久久久久星辰影视 | 一级网站 | 操嫩草 | av资源在线天堂 | 男女一边摸一边做羞羞视频免费 | 黄色大片大毛片 | 免费激情网站 | 国产精品美女一区二区 | 国产色爱综合网 | 免费亚洲视频在线观看 | 成人福利视频导航 | 国产精品6区 | 特级黄色小说 | 国产精品视频一区二区噜噜 | 草久在线 | 一级视频在线播放 | 国产精品一品二区三区四区18 | 成码无人av片在线观看网站 | 亚洲一级电影在线观看 | 国产精品jk白丝蜜臀av软件 | 久久久久久久久久久久免费 | 亚洲欧美日韩一区二区三区在线观看 |