符号付きの値を16進数で指定します(例:0xffeb
)。これを「通常の」Javascript整数として-21
に変換します。私がこれまでにいくつかのコードを書かれているJavascript:符号付き整数をjavacript値に変換する
:
function toBinary(a) { //: String
var r = '';
var binCounter = 0;
while (a > 0) {
r = a%2 + r;
a = Math.floor(a/2);
}
return r;
}
function twoscompl(a) { //: int
var l = toBinaryFill(a).length;
var msb = a >>> (l-1);
if (msb == 0) {
return a;
}
a = a-1;
var str = toBinary(a);
var nstr = '';
for (var i = 0; i < str.length; i++) {
nstr += str.charAt(i) == '1' ? '0' : '1';
}
return (-1)*parseInt(nstr);
}
問題はバイナリ表現「文字列」のMSBを見ているので、私の関数は、両方の番号をMSBとして1を返すこと、です。この場合、両方の数値は1:
-21 => 0xffeb => 1111 1111 1110 1011
21 => 0x15 => 1 0101
これをより効率的に、よりよく実装することをお考えですか? (ちょうどあなたの16進数文字列を受け入れる)に変換する
挨拶、 mythbu
あなたはマイナスの「0x10000」 – xiaoyi
@ xiaoyiあなたは正しいと思います。 –
それがどれほど重要かは分かりませんが、 'parseInt'で16進数を扱っているので、' parseInt(a、16) 'を使用したいと考えています。 – Ian