We are compiling using gcc with -Wconversion
enabled. I get following warnings when I left shift result returned by isBitSet
function below.
warning: conversion to 'u_int16_t {aka short unsigned int}' from 'int' may alter its value [-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;
}
I tried changing lambda to below, but still I get the same error. How can I fix it?
auto isBitSet = [&in](uint8_t position) -> uint16_t {
return (in & (1 << position)) ? 1u:0u;
};
To avoid the warning, you may do:
signal = uint16_t(signal | isBitSet(1u) << 9);
as operator |
promotes operator uint16_t
to int
.