flag是啥?要如何使用?
flag可以講是種代表方法可以用來代表多種bool的值.就像馬路上的紅綠燈一樣.馬路上的紅綠燈會告訴你現在能否行駛.紅燈表示不能.綠燈表示可以.黃燈表示小心.一般來講若要寫個程式來代表紅綠燈的話.最簡單的寫法就是宣告3個bool的變數叫做r(代表紅), g(代表綠), y(代表黃).r若是true的話那就表示紅燈亮了.r若是false的話那就表示紅燈沒亮.g和y都是用一樣的原理.若這樣寫的話那會用到3個bool.每個bool佔有4個bytes.所以會用掉4*3=12個bytes.
另一種寫法就是用flag.在電腦裡.一個int通常是4個bytes.每個bytes裡總共有8個bits.所以一個int裡總共有4*8=32個bits.每個bit的值不是0就是1.bool的變數不是也只能有2個值?(true和false).所以我們若以bit為單位的話那一個int裡不就可以容納32的bool?對不對?也就是說每一個bit就代表一個flag.當那個bit裡的值是0時表示那個flag是off(關).當那個bit裡的值是1時表示那個flag是on(開).
以下為一個int裡的每一個bit. (從右到左)
0x00000001 0x00000002 0x00000004 0x00000008
0x00000010 0x00000020 0x00000040 0x00000080
0x00000100 0x00000200 0x00000400 0x00000800
0x00001000 0x00002000 0x00004000 0x00008000
0x00010000 0x00020000 0x00040000 0x00080000
0x00100000 0x00200000 0x00400000 0x00800000
0x01000000 0x02000000 0x04000000 0x08000000
0x10000000 0x20000000 0x40000000 0x80000000
以紅綠燈為例.我們可以自己設定第一個bit代表紅.第一個bit代表綠.第一個bit代表黃.
#define RED 0x00000001
#define GREEN 0x00000002
#define YELLOW 0x00000004
(我用#define, 但你可用const)
因我們的單位是bit.所以我們要用bit的運算子.在檢查這燈是否亮要用’&’.要設定此燈是否亮要用’|’.例:
int lights; //lights代表整個紅綠燈.
lights = 0; //一開始所有的燈都不亮
lights = lights | RED; //亮紅燈.執行完此行.lights的值會變成1
lights = lights | GREEN; //亮綠燈.執行完此行.lights的值會變成3
lights = lights | YELLOW; //亮黃燈.執行完此行.lights的值會變成7
if (lights & RED) //檢查紅燈是否亮.lights的值是7.7裡有1所以紅燈有亮
cout << “亮紅燈”;
if (lights & GREEN) //檢查綠燈是否亮.lights的值是7.7裡有2所以綠燈有亮
cout << “亮綠燈”;
if (lights & YELLOW) //檢查黃燈是否亮.lights的值是7.7裡有4所以黃燈有亮
cout << “亮黃燈”;
lights &= ~RED; //關紅燈.執行完此行.lights的值會變成6
lights &= ~GREEN; //關綠燈.執行完此行.lights的值會變成4
lights &= ~YELLOW; //關黃燈.執行完此行.lights的值會變成0
留言列表