我可以将 0 移到开头吗?

Can I bit shift 0 to the beginning?

我正在努力学习 shifting/masking。这是我的代码:

    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));

除了布尔值之外,我得到的所有值都正确。总是1。有什么问题吗?我不能把零移到开头吗?

test 最多九位长。你将它右移 18 个位置。因此它占用位 18 到 27。你需要移动 bool 来放置 28 来避免它,而不是放置 19.

packed的第19位是test的第2位,是1。