2010-03-21

符号付き16ビット整数の左ビットシフトをRhinoでやってみる

シフト数を16にした時に、ようやく(value << shiftCount)だとダメだと気付いた。
function shiftLeft16(value, shiftCount) {
    return ((value & 0x7FFF) << shiftCount) | (value & ~0x7FFF);
}
function printValue16(value) {
    java.lang.System.out.println(
        value + "(" + java.lang.Integer.toBinaryString(value & 0xFFFF) + ")");
}

var value = -1;
printValue16(value);
printValue16(value << 16);
printValue16(shiftLeft16(value, 16));

// 結果は以下:
//-1(1111111111111111)
//-65536(0)
//-32768(1000000000000000)

0 件のコメント:

コメントを投稿