【发布时间】:2016-11-11 15:53:28
【问题描述】:
你能告诉我 convertLedNumberToBit 和 LedDriver_TurnOn 是做什么的吗?我不明白1 << (num - 1) 和|= 发生了什么
static uint16_t * ledsAddress;
static uint16_t convertLedNumberToBit(int ledNumber)
{
return 1 << (ledNumber - 1);
}
void LedDriver_TurnOn(int ledNumber)
{
*ledsAddress |= convertLedNumberToBit(ledNumber);
}
【问题讨论】:
-
更好的代码避免使用有符号整数数学和位。建议
return 1u << (ledNumber - 1);(加你) -
@chux 在这种情况下,如果他们忽略了 u 会有什么问题?
-
在 16 位处理器上,在 2016 年常见于嵌入式处理器,
1 << 15是未定义的行为参见 C11 §6.5.7 4. 使用1u << 15,它定义良好并且按预期运行。 -
好的。谢谢你的评论。你也应该发布一个答案。