Java 我可以将0位移到开头吗?

Java 我可以将0位移到开头吗?,java,bit,bit-shift,bitmask,Java,Bit,Bit Shift,Bitmask,我正在努力学习位移位/掩蔽。这是我的密码: int health = 511; // max 512, 9 bits int aimAngle = 510; // max 512, 9 bits int test = 511; // max 512, 9 bits boolean bool = false; // max 1, 1 bit int packed; packed = health | aimAngle << 9 | tes

我正在努力学习位移位/掩蔽。这是我的密码:

    int health = 511; // max 512, 9 bits
    int aimAngle = 510; // max 512, 9 bits
    int test = 511; // max 512, 9 bits
    boolean bool = false; // max 1, 1 bit
    int packed;
    packed = health | aimAngle << 9 | test << 18 | (bool?1:0) << 19;
    Debug.log("health: " + ((packed ) & 0b111111111));
    Debug.log("aimAngle: " + ((packed >> 9) & 0b111111111));
    Debug.log("test: " + ((packed >> 18) & 0b111111111));
    Debug.log("bool: " + ((packed >> 19) & 0b1));
int-health=511;//最大512,9位
int aimAngle=510;//最大512,9位
int test=511;//最大512,9位
布尔布尔布尔值=false;//最大1,1位
整装;
压缩=健康|角度>18)和0b111111111);
log(“bool:”+((打包>>19)和0b1));

我得到了所有的值,除了布尔。总是1。怎么了?我不能将零移到开头吗?

test
的长度最多为9位。你把它移到18个地方。因此,它占用位18到27。您需要将
bool
移动到第28位以避免它,而不是第19位


压缩的
的第19位是
测试的第二位,是1。

测试的长度最多为9位。你把它移到18个地方。因此,它占用位18到27。您需要将
bool
移动到第28位以避免它,而不是第19位


压缩的
的第19位是
测试的第二位,是1。

@Tom当然,不是problem@Tom当然,没问题