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

本文介绍了无符号整数和有符号整数的概念,并通过JavaScript实现了一个将无符号整数取反的函数。通过将二进制表示的数字进行位操作,将0变为1,1变为0,从而实现取反。示例代码展示了如何将一个十六进制无符号整数转换为其二进制反码并再次转换回十六进制。
摘要由CSDN通过智能技术生成

前言

最近有一段时间没写文章了,工作上比较忙,刚好今天有人问到我这个问题,我就去补了一下功课。然后在js上实现了一下。

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

  • 有符号就是最高位是符号位,其余的位是数据位。
  • 无符号就是所有位都是数据位。

比如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

大概就这样子。

END
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值