2010-12-02 48 views
5

的二進制值i想首先將數字轉換爲二進制,然後倒置它按位.. 這樣的:JavaScript的反轉數

數是793 = 1100011001 再轉換的二進制值成:0011100110

在JavaScript我能做到以下幾點:

var x = 793; 
document.write(x.toString(2)); // gives 0011100110 

這會給我多少.. 的二進制值,但我怎麼顛倒二進制位運算?

我試過〜運營商,但不是可能的工作...的輸出是:-1100011010

任何幫助嗎? 由於事先

回答

0

更新

是否要反轉值的字符串,是我不清楚,如果是的話,你可以這樣做:

function invert(x){ 
    var e = x.toString(2).split(''); 
    for(var i = 0, l = e.length; i < l; i++) { 
     e[i] = e[i] === '0' ? '1' : (e[i] === '1' ? '0' : e[i]); 
    } 
    return e.join(''); 
} 
invert(793); // '0011100110' 
invert(-793); // '-0011100110' 

這也將保留前導零。

+0

我不理解爲什麼這個答案,因爲0異或不** **沒有任何改變如你所示。 – 2010-12-02 18:24:17

+0

@Greg啊,大腦滯後抱歉,從我的外殼複製錯誤的東西,要修復它 – 2010-12-02 18:27:44

+0

xor'ing一個元素與0什麼都不做 – 6502 2010-12-02 18:38:34

4

你想XOR與111111111二進制值 - 但是很多1,因爲有原始數字。所以:

var x = 793; 
var result = x^parseInt((new Array(x.toString(2).length+1)).join("1"),2); 

(代碼從PHP.JS採取str_repeat)

重溫十年後,嘗試:

var x = 793; 
var result = parseInt(x.toString(2).replace(/[01]/g,function(n) {return 1-n;}),2); 

我相信這將是更有效的...大概。可能是完全錯誤的。好吧。

5

您需要使用位掩碼。

(~793 & 0x3ff).toString(2) //11100110 

或者用XOR

793^0x3ff 
8

MooGoo的答案是正確的。

這裏是關於發生了什麼的一些信息....讓我們假設這是一個64位整數。

793 = 1100011001 
~793 = -794 = 1111111111111111111111111111111111111111111111111111110011100110 
0x3ff = 1111111111 
(-793 & 0x3ff) = 11100110 

所以,你可以這樣做是爲了解決與此代碼的所有情況:

var x = 793; // input value 
var y = x.toString(2); 
var yl = y.length; 
var mask = (Math.pow(2,yl)-1); // calculate mask 
var result = ~x & mask; 
document.write(result.toString(2)+"<br/>");