美文网首页
js实现无符号整数按位`取反`

js实现无符号整数按位`取反`

作者: hao_developer | 来源:发表于2022-07-04 17:10 被阅读0次

    什么是无符号整数和有符号整数?

    有符号就是最高位是符号位,其余的位是数据位。
    无符号就是所有位都是数据位。
    比如char类型是8位的,其中最高位是符号位1=0b00000000,-1=0b11111111(这里涉及到了补码),它能表示的范围是-128~+127。unsigned char 是无符号字符型也是8位,它没有符号位,最高位是数据位,比如1=0b00000001,255=0b11111111,它的范围是0~255。

    其实要实现的功能就是比如: 无符号整数取反
    0b00110100
    0b11001011
    对比一下很明白吧!0和1反过来了。

    那么要怎么实现呢,简单的处理方式,无非就是0变1,1变0
    下面实现代码:

    /**
     * @msg: 
     * @param {number,string} hex 十六进制数字或者字符
     * @param {string} len 位长度
     * @return {string} 返回十六进制字符
     */
    function unsignedToReverse(hex,len){
      try{
        let bitArr;
        if(typeof hex === 'number'){
          bitArr = parseInt(hex);
        } else if(typeof hex === 'string'){
          bitArr = parseInt(hex,16);
        } else {
          console.error("hex参数有误")
          return;
        }
        bitArr = bitArr.toString(2).padStart(parseInt(len), "0").split('');
        let arr = [];
        // console.log(bitArr)
        bitArr.map((item,index) => {
          if(item == 1){
            arr[index] = 0
          } else if(item == 0){
            arr[index] = 1
          }
        })
        return "0x" + parseInt(arr.join(''),2).toString(16);
      } catch(err) {
        console.error("ERROR: %s",err)
      }
    }
    
    console.log(unsignedToReverse("0x38",8)) // 打印 0xc7
    console.log(unsignedToReverse12,8)) // 打印 0xf3
    

    相关文章

      网友评论

          本文标题:js实现无符号整数按位`取反`

          本文链接:https://www.haomeiwen.com/subject/crndbrtx.html