2016-11-20 6 views
1

私はこの符号なしの数値を1479636484000の7ビット右にシフトしたいと思います。これはJavaScriptで可能ですか?JavaScriptビットシフト

両方

1479636484000 >> 7 

1479636484000 >>> 7 
(私にとっては)間違った答えを返し

。正解は11559660031でなければなりません。 ここにはいくつかの記号ビットが含まれていると思います。数字が大きすぎるためサポートできません。しかし、それを取り巻く巧妙な方法はありますか?

+0

はい、ビット単位のシフトはhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operatorsを参照して、JSが可能です。私はxのビット数をシフトする特定の構文があるかどうかはわかりませんが。私は実際にこの機能を使用していません。 –

+0

[32ビットより長い変数でJavaScriptでビット単位のANDを実行する方法](http://stackoverflow.com/questions/3637702/how-to-do-bitwise-and-in-javascript-on) -variables-that-longer-than-32-bit) – SeinopSys

+0

私はこれが重複ではないと思います。以下の答えは、ビット単位およびソリューションには適用されません。 – HelloWorld

答えて

1

JavaScriptのビット演算は、32ビット整数に切り捨てて開始します。あなたの数字は大きすぎます。その限界を乗り越える "巧妙な方法"は、独自の数値ライブラリを実装することです。

128で浮動小数点除算を行うと、(小数点以下をドロップすると)正しい答えが得られることに注意してください。

+0

~~(n/128)は機能しません。 Math.trunc(n/128)は動作するはずですが、私はECMA 6を持っていないので、それは私を助けません。しかし、n/128 - n/128%1は機能します!ありがとう:) – HelloWorld

+0

ビットシフト演算子と同じように '〜'演算子とまったく同じ問題があります - 同じ32ビット切り捨てを行います。 'Math.floor()'は浮動小数点値から小数点を削除します。 – Pointy

1

数字のある文字列を使用し、最後の7文字を削除して番号に戻すことができます。

console.log((1479636484000).toString(2)); 
 
console.log((11559660031).toString(2)); 
 
console.log((1479636484000).toString(2).slice(0, -7)); 
 
console.log(parseInt((1479636484000).toString(2).slice(0, -7), 2));

+0

面白いですが、n/128 - n/128%1に行ってきました。 – HelloWorld

関連する問題