认识位移操作符

时间:2022-07-29 17:48:18

当年书没好好读,在做这行十几年之后的今天才有所了解这个位移操作。觉得很有意思所摘录下来,当笔记用。

参考网址如下:

http://www.w3school.com.cn/js/pro_js_operators_bitwise.asp

https://whis.wang/index.php/javascript/an-operator-use-in-js.html

 

摘录内容:

4.使用&, >>, |来完成rgb值和16进制颜色值之间的转换

/** * 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

以上的逻辑相信比看代码好看多了。:)