1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > js实现无符号整数按位取反

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

时间:2021-08-12 14:37:25

相关推荐

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

前言

最近有一段时间没写文章了,工作上比较忙,刚好今天有人问到我这个问题,我就去补了一下功课。然后在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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。