當年書沒好好讀,在作這行十幾年以後的今天才有所瞭解這個位移操做。以爲頗有意思所摘錄下來,當筆記用。javascript
參考網址以下:php
http://www.w3school.com.cn/js/pro_js_operators_bitwise.asphtml
https://whis.wang/index.php/javascript/an-operator-use-in-js.htmljava
摘錄內容:spa
4.使用&, >>, |來完成rgb值和16進制顏色值之間的轉換code
/** * 16進制顏色值轉RGB * @param {String} hex 16進制顏色字符串 * @return {String} RGB顏色字符串 */ function hexToRGB(hex) { var hexx = hex.replace('#', '0x') var r = hexx >> 16 var g = hexx >> 8 & 0xff var b = hexx & 0xff return `rgb(${r}, ${g}, ${b})` } /** * RGB顏色轉16進制顏色 * @param {String} rgb RGB進制顏色字符串 * @return {String} 16進制顏色字符串 */ function RGBToHex(rgb) { var rgbArr = rgb.split(/[^\d]+/) var color = rgbArr[1]<<16 | rgbArr[2]<<8 | rgbArr[3] return '#'+ color.toString(16) } // ------------------------------------------------- hexToRGB('#ffffff') // 'rgb(255,255,255)' RGBToHex('rgb(255,255,255)') // '#ffffff'
================================================================================================
總的來講,位移的應用多數是用在將大的數據分塊儲存在 byte[] 裏(一個byte存 8 位,即 256;因此不管左移仍是右移時都是 8 的倍數)。
右移是將數據分塊,左移是將數據合併還原。數據分塊和合並的操做就是利用 ^、& 和 | 操做符。
例如:#aabbcc 向右移 8 位則變爲 #aabb,再右移 8 位則變爲 #aa;#aa左移 16 位則爲 #aa0000,#bb左移 8 位#bb00, 位移後再與 #cc 用 | 作合併就可得出 #aabbcc
若是我要取出 bb,第一步,#aabbcc 右移 16 位,再左移 8 位,得 #aa00;第二步,#aabbcc 右移 8 位,得 #aabb,而後 #aa00 ^ #aabb,得 #bb以上的邏輯相信比看代碼好看多了。:)