我正在尝试理解以下代码片段:
unsigned char state = portStates[portNumber];
int bitValue = (state >> 7) & 0x1;
它在 的最不重要的位上进行按位与
state
,对吗?如果它返回真(即该位被设置),那么这个数字是奇数。否则,它是均匀的。我对么?
谢谢
我正在尝试理解以下代码片段:
unsigned char state = portStates[portNumber];
int bitValue = (state >> 7) & 0x1;
它在 的最不重要的位上进行按位与
state
,对吗?如果它返回真(即该位被设置),那么这个数字是奇数。否则,它是均匀的。我对么?
谢谢
int bitValue = (state >> 7) & 0x1;
只需移动state
7 位。然后它会删除除第一个之外的所有其他位。
因此,将值的第 7 位(在大多数系统中为 8 位的最高有效位unsigned char
)转换为 0 或 1 值。它可以写成布尔表达式(使用惯用的双重否定):
int bitValue = !!(state & 0x80);
但移位和屏蔽直接给出 0 或 1 值而不转换为布尔值。
(state>>7) 返回通过将无符号字符“状态”移动 7 位生成的值,并添加前导零。现在用 1 执行与操作会给出状态中第七位的值。
也就是说,当状态的第七位(从右起)为 1 时,bitValue 为 1,或者换句话说,当状态 >= 128 时,bitValue 为 1。