@Dougカリーはそれを置くとして、あなたはそれらの上にビット単位の演算を行い、その後、二つの数として64ビットの数値を表現する必要があります。私が使用したコードは次のとおりです。
//Constructor for a Long..
function Long(high, low) {
//note: doing "or 0", truncates to 32 bit signed
//big-endian 2's complement int..
this._high = high | 0;
this._low = low | 0;
}
Long.prototype.rotateLeft = function(bits) {
var newHigh;
if(bits === 32){ //just switch high and low over in this case..
newHigh = this._low;
this._low = this._high;
this._high = newHigh;
} else {
newHigh = (this._high << bits) | (this._low >>> (32-bits));
this._low = (this._low << bits) | (this._high >>> (32-bits));
this._high = newHigh;
}
return this; //for chaining..
};
//Rotates the bits of this word round to the right (max 32)..
Long.prototype.rotateRight = function(bits) {
var newHigh;
if(bits === 32){ //just switch high and low over in this case..
newHigh = this._low;
this._low = this._high;
this._high = newHigh;
} else {
newHigh = (this._low << (32-bits)) | (this._high >>> bits);
this._low = (this._high << (32-bits)) | (this._low >>> bits);
this._high = newHigh;
}
return this; //for chaining..
};
実行してみて、それを使用するには:console.log(new Long(0,1).rotateLeft(4));
、その後_highと_lowの特性を検査します。
知っていますか? – Amber
p.s. JavaScriptでこれをしないようにと教えてくれる人のためのダウンボーツ。役に立たない! JavaScriptがうまくいくようなことではないことを知っています。しかし、私はとにかくそれをする必要があります。 KTHXBAI。 – Jeff
私はあなたを信じていませんが、JavaScriptが2倍に格納している場合は、64bit intではなく2倍です(符号に関係なく)。 –