我正在尝试学习位移/屏蔽。这是我的代码:
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.有什么问题?我不能将零移到开头吗?
答案 0 :(得分:4)
test
长达九位。你把它移到了18个位置。因此它占据了第18位到第27位。你需要将bool
转移到28位以避免它,而不是放置19位。
packed
的第19位数字是test
的第二位数字,为1。