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当然,没问题