位運算的應用場景及作用

2021-10-18 04:24:17 字數 2723 閱讀 1955

位運算加速技巧

本方法可以讓c、c++語言指令進一步接近彙編指令的執行效率,提高嵌入式系統的速度和穩定性。

x = x * 2;

x = x * 64;

//改為:

x = x << 1; // 2 == 21

x = x << 6; // 64 == 26

x = x / 2;

x = x / 64;

//改為:

x = x >> 1; // 2 == 21

x = x >> 6; // 64 == 26

x = int(1.232)

//改為:

x = 1.232 >> 0;

var t:int = a;

a = b;

b = t;

//equals:

a = a^b;

b = a^b;

a = a^b;

i = -i;

//改為

i = ~i + 1; // not 寫法

//或i = (i ^ -1) + 1; // xor 寫法

x = 131 % 4;

//equals:

x = 131 & (4 - 1);

iseven = (i % 2) == 0;

//equals:

iseven = (i & 1) == 0;

//寫法1

i = x < 0 ? -x : x;

//寫法2

i = (x ^ (x >> 31)) - (x >> 31);

//寫法3

i=x^(~(x>>31)+1)+(x>>31);

eqsign = a * b > 0;

//equals:

eqsign = a ^ b > 0;

首先,顏色各個分量一般是以每8位為乙個單位。

8位,8bit,即乙個位元組,10進製數的取值範圍是0~255,一般用16進製表示,0x開頭,取值範圍是0x00到0xff(不區分大小寫)。

顏色一般有24位和32位兩種表示方法。

a即alpha值,alpha值為0時顏色為透明,alpha值為最大值時顏色為完全不透明,即可完全覆蓋處於它下面的其他顏色,無其他顏色可以透過它而顯示出來。

具體進行位移操作如下圖:

表示顏色分量的數要想轉化成乙個整個的顏色,就必須和其他的分量組合,每個分量放在自己應當處於的位置,就應該進行位移操作。

tips:圖中的顏色值34,23和88都是十六進製制表示的,所以移位操作的時候可以直接移動位置表示。

移位後就是整體移動相應的位數,乙個字母代表四位。

r移動16位,g移動8位,b不需要移動。

如果有a值,則a需要向左移動24位。

需要注意的是,不管是用什麼進製表示,十進位制還是十六進製制還是二進位制,位移操作都是二進位制範疇的。

反向的轉換則是右移。

知道乙個顏色整體值,想提取某乙個顏色分量,方法就是向右移動相應的位數,然後做乙個與運算,與0xff做與運算可以提取最低的兩位。

var 24bitcolor:uint = 0xff00cc;

var r:uint = 24bitcolor >> 16;

var g:uint = 24bitcolor >> 8 & 0xff;

var b:uint = 24bitcolor & 0xff;

var 36bitcolor:uint= 0xff342388;

var a:uint = color >>> 24 //注意這裡是》,無符號右移位操作,右移24位,把342388移出,得到0xff

var r:uint = color >> 16 & 0xff;//右移16位,把2388移出,取0x34

var g:uint = color >> 8 & 0xff;//右移8位,把88移出,得0x3423,與0xff按位與操作,得0x23

var b:uint = color & 0xff;//得到0x88

var r:uint = 0xff;

var g:uint = 0x00;

var b:uint = 0xcc;

var 24bitcolor:uint = r << 16 | g << 8 | b;

var a:uint = 0x01;

var r:uint = 0xff;

var g:uint = 0x00;

var b:uint = 0xcc;

var 36bitcolor:uint= a<<24 | r << 16 | g << 8 | b;

位運算的應用場景

1 使用位運算來判斷奇數偶數 console.log 22 1 返回0 console.log 23 1 返回112說明 在前邊看出任何數轉換成二進位制數,若為偶數,那麼他最後一位肯定為0 否則為1 因此使用按位與將這個數與1進行操作,1轉換為二進位制是000 01因此與1進行按位與運算偶數返回0,...

ActiveMQ的作用總結 應用場景及優勢

業務場景說明 訊息佇列在大型電子商務類 如京東 去哪兒等 有著深入的應用,佇列的主要作用是消除高併發訪問高峰,加快 的響應速度。在不使用訊息佇列的情況下,使用者的請求資料直接寫入資料庫,在高併發的情況下,會對資料庫造成巨大的壓力,同時也使得系統響應延遲加劇。在使用佇列後,使用者的請求發給佇列後立即返...

ActiveMQ的作用總結 應用場景及優勢

業務場景說明 訊息佇列在大型電子商務類 如京東 去哪兒等 有著深入的應用,佇列的主要作用是消除高併發訪問高峰,加快 的響應速度。在不使用訊息佇列的情況下,使用者的請求資料直接寫入資料庫,在高併發的情況下,會對資料庫造成巨大的壓力,同時也使得系統響應延遲加劇。在使用佇列後,使用者的請求發給佇列後立即返...