我有一个问题,如果涉及到低级编程,我不是很好,所以我有一个快速问题,即该字节中的每个2位都表示某事:
我的字节是204,根据计算器,应该是1100 1100
bits 0..1 mean status of type 1
bits 3..2 mean status of type 2
bits 5..4 mean status of type 3
bits 7..6 mean status of type 6
因此要检查我使用的所有值:
var state = 204
var firstState = (state >> 0) & 2
var secondState = (state >> 2) & 2
var thirdState = (state >> 4) & 2
var fourthState = (state >> 6) & 2
但这看起来很奇怪,我扩展了结果
firstState = 0
secondState = 3
thirdState = 0
thirdState = 3
但我收到0,2,0,2。那我在做什么错了?
答案 0 :(得分:4)
您需要使用3(二进制11)而不是2(二进制10)进行屏蔽:
var state = 204;
var firstState = (state >> 0) & 3;
var secondState = (state >> 2) & 3;
var thirdState = (state >> 4) & 3;
var fourthState = (state >> 6) & 3;
屏蔽时,该操作将应用于每个值中相应位置的位,因此:
And
11001100 (204)
00000011 (3)
--------
00000000 (0)
虽然
And
00110011 (51)
00000011 (3)
--------
00000011 (3)