在右移位后对无符号字符对象使用逐位AND运算符意味着什么?

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(即,该位被设置),则该数字是奇数.否则,它甚至是.我对么?

谢谢

Jea*_*bre 5

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.

  • 现代*通用*CPU上的1个字节始终为8位.有很多[现代的东西,它不一定是真的](/sf/ask/3132852411/). (2认同)