1. 程式人生 > >特定位取反(js實現)

特定位取反(js實現)

ack 左移 運算 pre 是把 data- 類型 位操作 個數

去華為面試的時候。沒有做好準備工作。面試的流程沒有問清也沒有查,結果一過去就讓上機做題,著實有點措手不及。筆者是擅長前端的Java Webproject師啊,主要的底層編程知識早已生疏了。機試題碰到了這道位運算的題目,按理說是非常easy的,原理筆者也非常清楚。可是因為實在是好多年沒有搞過位運算了,Java位運算更是沒有操作過。所以結果實在是不體面……

機試時間規定是一個小時。語言可選C或Java還有個什麽腳本語言,筆者花了將近三個小時。才用Java勉強把題做出來了。羞愧羞愧……回來就用JS又一次實現了一個簡單版本號。今天整理貼出來。

題目是:循環輸入每組兩個數hex和n(0<=n<31),hex是一個16進制的數字,我們要做的是將hex的第n位取反。然後以16進制的形式輸出相應的結果。

筆者折騰兩個多小時的過程就不再贅述了,這裏給出js的實現。非常easy的位操作基礎知識。原理啰嗦一句。就是把1按比特位左移n位,然後跟原數異或即可了:

function bitOper(hex, n){
    var num = parseInt(hex); 
    num ^= (1<<n);
    return num.toString(16);
}
console.log(bitOper(0x1234, 3));    //123c
因為js整數類型僅僅有32位的限制,上述演示樣例代碼僅支持n<31的簡單情況(第31位是符號位)。





特定位取反(js實現)