JavaScriptは、2の補数表現を使用せず-
、文字列の前に文字を使用します。これは、数値範囲のビット数がわからないためです。
期待される結果を得るには、各ビットを反転します。
>>> (~-805306368).toString(2)
"101111111111111111111111111111"
それでも、javascriptは32ビット整数に対してすべての二項演算を実行するため、これは大きい(または小さい)数値では機能せず、少なくとも非常に混乱します。したがって、独自のフォーマットアルゴリズムを実装する必要があります。
// example of to 32-bit-conversion:
>>> (~parseInt("1111111111111111111111111111111",2)).toString(2)
"-10000000000000000000000000000000"
>>> (~parseInt("11111111111111111111111111111111",2)).toString(2)
"0"
私の実装:
String.prototype.padleft = function(len, chr){...}
function get64binary(int) {
if (int>=0)
return int
.toString(2)
.padleft(64, "0");
// else
return (-int-1)
.toString(2)
.replace(/[01]/g, function(d){return +!+d;}) // hehe: inverts each char
.padleft(64, "1");
}