移位和屏蔽

时间:2020-04-06 13:19:23

标签: c#

我有一个问题,如果涉及到低级编程,我不是很好,所以我有一个快速问题,即该字节中的每个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。那我在做什么错了?

1 个答案:

答案 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)
相关问题