Java海闊天空

          編程是我的生活,但生活不僅僅是編程。

          使用二進(jìn)制實(shí)現(xiàn)標(biāo)志疊加

           

          每一個(gè)標(biāo)志都使用一個(gè)以1開頭,后面全部接0的二進(jìn)制表示,長(zhǎng)度不限,:

          int x = 0x8             ->           1000

          int y = 0x10           ->           10000

          int z = 0x20           ->           100000

          疊加的結(jié)果是:int a = x | y | z.    -> 111000

          判斷是否有x標(biāo)志:

          if((a & x) == x)            -> 如果返回值為真,表示確實(shí)包含了x標(biāo)記.

          代碼:

                 int x1 = 0x8;

                 int y1 = 0x10;

                 int z1 = 0x20;

                 int rrr = x1 | z1;

                 if((rrr & x1) == x1)

                 {

                        printf("x標(biāo)記"n");

                 }

                 if((rrr & y1) == y1)

                 {

                        printf("y標(biāo)記"n");

                 }

                 if((rrr & z1) == z1)

                 {

                        printf("z標(biāo)記"n");

                 }

          示例:

          package com.aptechb;

          import java.util.Scanner;

          /**
           * 應(yīng)用一:保存狀態(tài)
           * <hr>
           * 比如在描述一個(gè)人的愛好時(shí),會(huì)用多個(gè)復(fù)選框標(biāo)識(shí)出選項(xiàng):閱讀,看電視,交際等,如何保存到數(shù)據(jù)庫(kù)比較好呢?
           */

          public class Binary {

           public static void saveStatus() {
            int status = 0x0; // 用于保存愛好,如果愛好項(xiàng)目很多,可以用long等.每一位保存一個(gè)愛好.
            // 假設(shè):
            // 0000 0000 0000 0000 0000 0000 0000 1111
            // 從低位到高位分別保存閱讀,交際,電影,喝咖啡,即
            // 0000 0000 0000 0000 0000 0000 0000 1(喝咖啡)1(電影)1(交際)1(閱讀)
            // 如果為0表示沒有該愛好.

            // 比如我的愛好有:電影,閱讀,則
            // status = 0x5;
            // 將0x5與0x1做&運(yùn)算,如果結(jié)果為0x1,則表示閱讀是我的愛好
            // 將0x5與0x10做&運(yùn)算,如果結(jié)果為0x10,則表示交際是我的愛好
            // 將0x5與0x100做&運(yùn)算,如果結(jié)果為0x100,則表示電影是我的愛好
            // 將0x5與0x1000做&運(yùn)算,如果結(jié)果為0x1000,則表示喝咖啡是我的愛好
            
            //接收輸入
            System.out.println("請(qǐng)輸入對(duì)應(yīng)數(shù)字:\n1.閱讀\n2.交際\n4.電影\n8.喝咖啡\n\n0.結(jié)束輸入\n");
            Scanner scanner = new Scanner(System.in);
            int input = scanner.nextInt();
            while(input != 0){
             status |= input;
             input = scanner.nextInt();
            }
            System.out.println("您輸入的結(jié)果計(jì)算后的二進(jìn)制表示:" + Integer.toBinaryString(status));

            System.out.println("\n-----------------\n您的愛好有:");
            for (Hobby hobby : Hobby.values()) {
             if ((status & hobby.getFlag()) == hobby.getFlag()) {
              System.out.println(hobby);
             }
            }
           }

           public static void main(String[] args) {
            saveStatus();
           }
          }


          示例中用到的枚舉:

          package com.aptechb;

          public enum Hobby {
           閱讀(0x1), 交際(0x2), 電影(0x4), 喝咖啡(0x8);
           
           private int flag;
           
           private Hobby(int flag){
            this.flag = flag;
           }
           
           public int getFlag() {
            return flag;
           }
          }


          posted on 2010-01-29 17:36 李贊紅 閱讀(2131) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 使用二進(jìn)制實(shí)現(xiàn)標(biāo)志疊加[未登錄] 2010-02-01 14:12 Nicholas

          學(xué)習(xí)了,非常實(shí)用
          很多掩碼的實(shí)現(xiàn)都可以參考  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統(tǒng)計(jì)

          常用鏈接

          留言簿(12)

          隨筆檔案(28)

          相冊(cè)

          技術(shù)友情博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 台北县| 隆尧县| 左云县| 株洲市| 左权县| 雷波县| 涟水县| 英山县| 云龙县| 漳平市| 盐城市| 淮北市| 林州市| 交城县| 绥滨县| 巴彦淖尔市| 潮州市| 岳阳县| 滨海县| 张家港市| 临江市| 遂川县| 舟山市| 视频| 东安县| 长海县| 明星| 华容县| 彰武县| 鄂州市| 屯门区| 句容市| 惠东县| 南岸区| 昌吉市| 商洛市| 高尔夫| 行唐县| 永年县| 宽城| 定结县|