the*_*ive 0 c bitwise-operators byte-shifting
我正在尝试理解以下代码片段:
unsigned char state = portStates[portNumber];
int bitValue = (state >> 7) & 0x1;
Run Code Online (Sandbox Code Playgroud)
它在最不重要的位上做了一个按位AND
state,对吗?如果它返回true(即,该位被设置),则该数字是奇数.否则,它甚至是.我对么?
谢谢
int bitValue = (state >> 7) & 0x1;
Run Code Online (Sandbox Code Playgroud)
只是换state了7位.然后它删除除第一个之外的所有其他位.
因此,将您的值的第7位(大多数系统中最重要的位,unsigned char即8位)转换为0或1值.它可以写成布尔表达式(使用惯用双重否定):
int bitValue = !!(state & 0x80);
Run Code Online (Sandbox Code Playgroud)
但是移位和屏蔽直接给出0或1值而不转换为bool.