I have a function which accepts a uint8_t
variable. When I use the bitwise complement i.e. ~
operator on the parameter value, I get the following warning:
warning: conversion to 'uint8_t {aka unsigned char}' from 'int' may alter its value [-Wconversion]
func(~ui);
Here is a working example:
void func(uint8_t ui) {}
int main() {
uint8_t ui{0xF0};
// Without compl operator it works
func(ui);
// Getting warning: conversion to 'uint8_t {aka unsigned char}'
// from 'int' may alter its value
func(~ui);
// Here the ~ operator changes the 8-bit ui to 32-bit
std::cout << "ui: " << std::bitset<sizeof(ui)*8>(ui) << std::endl;
std::cout << "~ui: " << std::bitset<sizeof(~ui)*8>(~ui) << std::endl;
return 0;
}
which generates the following output:
ui: 11110000
~ui: 11111111111111111111111100001111
I've read and tested the example at cppreference. They use a bitset
which uses a byte storage per bit and does not elaborate on the case when using the operator only on a single byte. I also checked cplusplus which does not explain why either.
Thus, why can't you use the ~
operator (and I've checked the other bitwise operators as well) on a uint8_t
without it changing the uint8_t
to an int
?