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

时间:2016-01-15 15:49:17

标签: 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 | 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));

除了bool,我正确地获取了所有值。总是1.有什么问题?我不能将零移到开头吗?

1 个答案:

答案 0 :(得分:4)

test长达九位。你把它移到了18个位置。因此它占据了第18位到第27位。你需要将bool转移到28位以避免它,而不是放置19位。

packed的第19位数字是test的第二位数字,为1。