我可以将 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。
我正在努力学习 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。