zoukankan      html  css  js  c++  java
  • 认识位移操作符

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

    参考网址如下:

    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

    以上的逻辑相信比看代码好看多了。:)
  • 相关阅读:
    Python内存管理机制
    哈希表(散列表)
    Python面向对象三大特性
    Python 面向对象继承
    Python面向对象 类的空间问题
    面向对象初识
    增量式爬虫
    分布式爬虫
    crawlscrapy框架
    HTML
  • 原文地址:https://www.cnblogs.com/Koy/p/10000412.html
Copyright © 2011-2022 走看看