js實現(xiàn)特定位取反原理及示例
去華為面試的時候,沒有做好準(zhǔn)備工作;面試的流程沒有問清也沒有查,結(jié)果一過去就讓上機做題,著實有點措手不及。筆者是擅長前端的Java Web工程師啊,基本的底層編程知識早已生疏了。機試題碰到了這道位運算的題目,按理說是非常簡單的,原理筆者也很清楚,但是由于實在是好多年沒有搞過位運算了,Java位運算更是沒有操作過,所以結(jié)果實在是不體面……
機試時間規(guī)定是一個小時,語言可選C或Java還有個什么腳本語言,筆者花了將近三個小時,才用Java勉強把題做出來了,慚愧慚愧……回來就用JS重新實現(xiàn)了一個簡單版本,今天整理貼出來。
題目是:循環(huán)輸入每組兩個數(shù)hex和n(0<=n<31),hex是一個16進制的數(shù)字,我們要做的是將hex的第n位取反,然后以16進制的形式輸出對應(yīng)的結(jié)果。
筆者折騰兩個多小時的過程就不再贅述了,這里給出js的實現(xiàn),很簡單的位操作基礎(chǔ)知識。原理啰嗦一句,就是把1按比特位左移n位,然后跟原數(shù)異或就行了:
function bitOper(hex, n){
var num = parseInt(hex);
num ^= (1<<n);
return num.toString(16);
}
console.log(bitOper(0x1234, 3)); //123c
由于js整數(shù)類型只有32位的限制,上述示例代碼僅支持n<31的簡單情況(第31位是符號位)。
相關(guān)文章
JS是否可以跨文件同時控制多個iframe頁面的應(yīng)用技巧
這篇文章給大家詳細介紹了JS是否可以跨文件同時控制多個iframe頁面的應(yīng)用技巧,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2007-12-12
HTML5基于Tomcat 7.0實現(xiàn)WebSocket連接并實現(xiàn)簡單的實時聊天
WebSocket 是一種自然的全雙工、雙向、單套接字連接。這篇文章給大家介紹了HTML5基于Tomcat 7.0實現(xiàn)WebSocket連接并實現(xiàn)簡單的實時聊天,感興趣的朋友一起學(xué)習(xí)吧2016-10-10
TypeScript模塊與命名空間的關(guān)系和使用方法
在TypeScript中就像在EC5中一樣,任何包含頂級import或export的文件都被認(rèn)為是一個模塊,下面這篇文章主要給大家介紹了關(guān)于如何在TypeScript使用模塊與命名空間以及注意事項的相關(guān)資料,需要的朋友可以參考下2023-03-03
JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧詳解
棧作為一種數(shù)據(jù)結(jié)構(gòu),是一種只能在一端進行插入和刪除操作的特殊線性表,也成稱為先進后出表,下面這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧的相關(guān)資料,需要的朋友可以參考下2022-06-06
js實現(xiàn)點擊復(fù)制當(dāng)前文本到剪貼板功能(兼容所有瀏覽器)
這篇文章主要介紹了js實現(xiàn)點擊復(fù)制當(dāng)前文本到剪貼板功能,兼容所有瀏覽器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-12-12
關(guān)于base64編碼和解碼的js工具函數(shù)
這篇文章主要介紹了關(guān)于base64編碼和解碼的js工具函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

