2009-09-22 51 views
3

var d = 7;設置數字中的特定位

二進制

:7 =(111)

我想要做的是從處置權爲1或0組第二名,

,並返回十進制值。

例如,如果我想使第二1爲0,在此之後處理應該返回圖5,

因爲5 =(101)。

如何在JavaScript中實現這個?

編輯

答案應該是這樣的:

function func(decimal,n_from_right,zero_or_one) 
{ 

} 

凡小數要處理的數量, n_from_right是如何從右側多少位,我在上面的例子是2 。 zero_or_one表示在處置時將該特定位設置爲0或1。

回答

14

最簡單的方法清除一點,就是使用和它的補位操作。

7 = 0000000000000111 
~2 = 1111111111111101 
& : 0000000000000101 

在代碼:

var d = 7, mask = 2; 
d &= ~mask; 

要設置位,而不是將其清除的,可以使用或操盤手:

d |= mask; 

如果您需要動態地創建蒙版來處理不同的位,您從值1開始(二進制0000000000000001)並將該位移到正確的索引。所述第二位具有索引之一(最右邊的位的索引值爲零),所以:

var index = 1; 
var mask = 1 << index; 
+0

+1 - 很好的答案,很好地解釋了 –

+0

我誤會了嗎? '〜2!== parseInt(「1111111111111101」,2)' –

+0

@MichaelTheriot:我在答案中簡化了一點,按位運算符在32位數上工作,所以它應該是另外16個1纔是準確的。但是,這些數字仍然不相同,因爲'〜2'是'-3'和'parseInt(「11111111111111111111111111111101,2)'是'4294967293'。由於按位運算符在32位數字上工作,「4294967293」太大而不適合32位,所以在操作中將轉換爲「-3」。 (嗯,它真的轉換爲數字的二進制表示形式,但在轉換回來時它以'-3'形式出現。) – Guffa

10

一種方式做到這一點,但你可能會得到更好的使用按位運算符

var d = 7; 
var binary = d.toString(2); 

binary = binary.split(''); 
binary[1] = "0"; 
binary = binary.join(''); 
binary = parseInt(binary,2); 
+3

我同意按位arithmeti c是最好的,但+1指出了相對鮮爲人知的方式來轉換/從二進制字符串。 – bobince

0

可以使用Javascript bitwise operators

var five = 7 & ~2; 

2 = 10二進制

+0

〜2是什麼意思? – omg

+0

〜按位不 - https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Bitwise_Operators#.7e_%28Bitwise_NOT%29 –

1

要設置第二位,只需OR 2(二進制10)

var d=5; 
var mask=2; 
var second_bit_set=d | mask; 


      d: 101 
     mask: 010 
-------------------- 
bitwise OR: 111 

以除去第二位,你想要與所有位設置的值,除了第二個。構造這個值的簡單方法是對該值執行按位NOT,例如,〜2

var d=7; 
var mask=~2; 
var second_bit_unset=d & mask; 

      d: 111 
     mask: 101 
-------------------- 
bitwise AND: 101 

對這些運營商的更多信息請參閱本bitwise operator reference

0
var str="XXX\tYYYYYYY\n"; 
for(var i=0;i<=7;i++){ 
str+=(i+8).toString(2).substring(1)+"\t"+(i*11+22+128).toString(2).substring(1); 
str+="\n"; 
} 
console.info(str); 

你可以從我的自行車做出FUNC

1

/** 轉換爲十進制數以二進制 **/

var toBinary = function(decNum){ 
    return parseInt(decNum,10).toString(2); 
} 

/** 轉換成二進制數轉換爲十進制 **/

var toDecimal = function(binary) { 
    return parseInt(binary,2).toString(10); 
}