我们正在使用-Wconversion
启用的 gcc 进行编译。当我离开isBitSet
下面函数返回的移位结果时,我收到以下警告。
警告:从“int”转换为“u_int16_t {aka short unsigned int}”可能会改变其值 [-Wconversion]
#include <stdint.h>
using namespace std;
void convertToPos(uint16 in) {
auto isBitSet = [&in](uint8_t position) -> bool{
return (in & (1 << position));
};
uint16_t signal = 0;
signal |= isBitSet(1) << 9; // Calibrated
signal |= isBitSet(2) << 10; // Corresponds to digital map
signal |= isBitSet(5) << 13; // DR
signal |= isBitSet(8) << 15; // 3D Fix
}
int main(int argc)
{
convertToPos(4);
return 0;
}
我尝试将 lambda 更改为以下,但仍然出现相同的错误。我该如何解决?
auto isBitSet = [&in](uint8_t position) -> uint16_t {
return (in & (1 << position)) ? 1u:0u;
};