c - If 条件包含指针和整数的 AND

标签 c if-statement

我正在查看一些包含此语句的 C 代码。

if (
     ((uint8_t *)row)[byte] & (1 << (8-bit))
   ) 
value |= (value + 1);

将指针和整数的 AND 放在条件括号内的含义和目的是什么?

最佳答案

在其他上下文中是有含义的,但这里不是这样的。

它将row(我假设是某种指针)转换为uint8_t *,然后挑选出byte -该数组中的第 uint8_t 。然后将其与左移内容进行按位与运算。

逻辑上与以下内容相同:

uint8_t shifted = (1 << (8 - bit))
uint8_t *rowptr = (uint8_t *)row;
uint8_t rowval = rowptr[byte];
uint8_t combined = (rowval & shifted);

if (combined)  // or, if (combined != 0)
  value |= (value + 1);

关于c - If 条件包含指针和整数的 AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537627/

相关文章:

java - 弹出堆栈时内存会发生什么情况?

c - 当我使用错误的格式说明符时会发生什么?

c - 使用一组运算符在 C 中定义宏

Bash 脚本 - 有人可以校对并解释为什么它是错误的

iphone - 如果带有文本框的语句不起作用

c - 如何使用 char var 字符串连接和调用系统

c - 如何在 vxworks 或 linux 上取消阻塞的 read/recvfrom 系统调用

swift - 条件语句的预期声明

arrays - 如何为已打乱的数组添加依赖项?

javascript - 如何在javascript中的if中将OR切换为AND