js實(shí)現(xiàn)無符號(hào)整數(shù)按位取反方式
前言
最近有一段時(shí)間沒寫文章了,工作上比較忙,剛好今天有人問到我這個(gè)問題,我就去補(bǔ)了一下功課。然后在js上實(shí)現(xiàn)了一下。
什么是無符號(hào)整數(shù)和有符號(hào)整數(shù)?
- 有符號(hào)就是最高位是符號(hào)位,其余的位是數(shù)據(jù)位。
- 無符號(hào)就是所有位都是數(shù)據(jù)位。
比如char類型是8位的,其中最高位是符號(hào)位1=0b00000000,-1=0b11111111(這里涉及到了補(bǔ)碼),它能表示的范圍是-128~+127。
unsigned char 是無符號(hào)字符型也是8位,它沒有符號(hào)位,最高位是數(shù)據(jù)位,比如1=0b00000001,255=0b11111111,它的范圍是0~255。
嗯,大概就是這么個(gè)意思了。
其實(shí)要實(shí)現(xiàn)的功能就是比如: 無符號(hào)整數(shù)取反
- 0b00110100
- 0b11001011
對(duì)比一下很明白吧!0和1反過來了。
要怎么實(shí)現(xiàn)呢
簡(jiǎn)單的處理方式,無非就是0變1,1變0嘛。
下面實(shí)現(xiàn)代碼:
/**
* @msg:
* @param {number,string} hex 十六進(jìn)制數(shù)字或者字符
* @param {string} len 位長度
* @return {string} 返回十六進(jìn)制字符
*/
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參數(shù)有誤")
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
大概就這樣子。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- JavaScript浮點(diǎn)數(shù)進(jìn)行整數(shù)轉(zhuǎn)換的三種方法
- JavaScript判斷輸入是否為整數(shù)的正則表達(dá)式
- JS利用ES6和ES5分別實(shí)現(xiàn)長整數(shù)和字節(jié)數(shù)組互轉(zhuǎn)
- JavaScript做大整數(shù)加法計(jì)算的代碼實(shí)現(xiàn)
- 解決超出JS的安全整數(shù)的限制范圍問題
- 如何自定義Mybatis-Plus分布式ID生成器(解決ID長度超過JavaScript整數(shù)安全范圍問題)
- JS限制input框只能輸入0~100的正整數(shù)的兩種方法
相關(guān)文章
javascript parseInt與Number函數(shù)的區(qū)別
在js中,如果你使用parseInt("08"),一般都會(huì)認(rèn)為會(huì)返回8,然而實(shí)際上返回了0.但是用Number("08")返回的才是8.2010-01-01
購物車前端開發(fā)(jQuery和bootstrap3)
針對(duì)購物車的操作,進(jìn)行產(chǎn)品數(shù)量的增加減少,刪除購物車中產(chǎn)品項(xiàng),本文使用JQuery1.11和bootstrap3進(jìn)行購物車開發(fā),感興趣的小伙伴們2016-08-08
js獲取數(shù)組對(duì)象中的全部key和value值
本文主要介紹了js獲取數(shù)組對(duì)象中的全部key和value值,主要使用JavaScript的?map()?函數(shù)和?values()?迭代器來實(shí)現(xiàn)取出數(shù)組對(duì)象的所有key值和value值,感興趣的可以了解下2024-01-01
JavaScript精煉之構(gòu)造函數(shù) Constructor及Constructor屬性詳解
對(duì)象的constructor屬性用于返回創(chuàng)建該對(duì)象的函數(shù),也就是我們常說的構(gòu)造函數(shù),除了創(chuàng)建對(duì)象,構(gòu)造函數(shù)(constructor) 還做了另一件有用的事情—自動(dòng)為創(chuàng)建的新對(duì)象設(shè)置了原型對(duì)象(prototype object)2015-11-11
基于d3.js/neovis.js/neod3.js實(shí)現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫的圖像化顯示功能
neovis.js?由vis.js支持的圖形可視化以及來自Neo4j的數(shù)據(jù)。這篇文章主要介紹了基于d3.js/neovis.js/neod3.js實(shí)現(xiàn)鏈接neo4j圖形數(shù)據(jù)庫的圖像化顯示功能,需要的朋友可以參考下2022-02-02
深入理解JavaScript系列(7) S.O.L.I.D五大原則之開閉原則OCP
本章我們要講解的是S.O.L.I.D五大原則JavaScript語言實(shí)現(xiàn)的第2篇,開閉原則OCP(The Open/Closed Principle )。2012-01-01
bootstrap fileinput完整實(shí)例分享
這篇文章主要為大家分享文件上傳組件bootstrap fileinput完整實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11

