一說到二進(jìn)制,我們總是或多或少的感覺沒有底,因為接觸的比較少,而且也不是那么直觀,容易理解,這次就來談?wù)勗贔LASH中使用二進(jìn)制,老少皆宜哦。
首先來看一段程序var round:Number = 2; var sweet:Number = 4; var delicious:Number = 8; var blet:Number = 16;
//蘋果是甜的、圓的、好吃的 var apple:Number = round | sweet | delicious;
//下面我們來看看蘋果是不是好吃的 if(apple & delicious){ trace("apple is delicious"); } //再來看看蘋果是不是圓的 if(apple & round){ trace("apple is round"); }
//再來看看蘋果有沒有腐爛 //這里不會輸出,因為我們先前定義的蘋果并沒有腐爛 if(apple & blet){ trace("apple is blet"); }
//假設(shè)我們的蘋果腐爛了,那我們將加上腐爛這個屬性,同時去掉美味這個屬性 apple |= blet; apple = apple & ~delicious; //我們再來看看上面的輸出 //第二個輸出將不會顯示 if(apple & blet){ trace("apple is blet"); } if(apple & delicious){ trace("apple is delicious"); } 下面我們來分析一下上面的代碼 我首先定義了4個屬性,應(yīng)該注意到了這四個屬性的值分別是2的N次方,其實換成2進(jìn)制就是10,100,1000,10000 接著又定義了一個apple變量,用到了"|"符號(按位 OR 運算符),官方的解釋是:
expression1 | expression2
將 expression1 和 expression2 轉(zhuǎn)換為無符號的 32 位整數(shù),然后對于 expression1 或 expression2 的為 1 的對應(yīng)位的每一位返回 1。浮點數(shù)通過舍去小數(shù)點后面的所有位來轉(zhuǎn)換為整數(shù)。結(jié)果是一個新的 32 位整數(shù)。
如果覺得不太能理解,那就以上面的例子為例。"10 | 100" 的結(jié)果是110,"110 | 1000"的結(jié)果是1110。所以apple的值其實就是二進(jìn)制的1110,轉(zhuǎn)換成10進(jìn)制就是14 然后又出現(xiàn)了一個"&"符號(按位 AND 運算符),官方解釋:expression1 & expression2
將 expression1 和 expression2 轉(zhuǎn)換為 32 位無符號整數(shù),并對整數(shù)參數(shù)的每一位執(zhí)行布爾 AND 運算。浮點數(shù)通過舍去小數(shù)點后面的所有位來轉(zhuǎn)換為整數(shù)。結(jié)果是一個新的 32 位整數(shù)。
說白了,就是expression1和expression2的相同位數(shù)上必須都是1,那么在結(jié)果的對應(yīng)位置上才是1,所以"apple & delicious"的運算過程就是"1110 & 1000"等于1000,所以判斷成立
在加上了blet屬性后,我們?nèi)サ鬱elicious屬性,這是通過"&"和"~"共同完成的,這里又出現(xiàn)了一個"~"(按位 NOT 運算符),就是一個取反運算,原來是0的變1,原來是1的變0,所以"apple & ~delicious"的運算過程是:首先對delicious取反,delicious原來是1000,取反之后自然變成了0111,再與apple執(zhí)行&運算,"11110 & 0111",結(jié)果是10110,相當(dāng)于去掉了delicious屬性
二進(jìn)制的一個比較典型的用法,就是可以用來保存多個屬性,同時可以對這些屬性進(jìn)行基本的運算,這個在上面的代碼中已經(jīng)體現(xiàn)出來了。
補注: 其實,上面這種屬性的聲明方法并不是很明智,因為一旦屬性比較多的話,還得去計算2的N次方到底等于多少,所以,可以采用下面的方法。var shifts:Number = 0;
var ONE = 1 << shifts++; // 1 var TWO = 1 << shifts++; // 2 var THREE = 1 << shifts++; // 4 var FOUR = 1 << shifts++; // 8
"<<"(按位向左移位運算符),比如"2 << 2"的結(jié)果就是8,就是將2的2進(jìn)制"10"向左移兩位,也就是"1000",轉(zhuǎn)換成10進(jìn)制就是8。
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2742543-1-1.html
本文鏈接:http://m.95time.cn/tech/multimedia/2007/4698.asp
出處:藍(lán)色理想
責(zé)任編輯:elesa
◎進(jìn)入論壇Flash專欄版塊參加討論
|