GCC 4.9.1报告“警告:从'int'转换为'unsigned char'可能会改变它的值[-Wconversion]”,代码如下为什么bit-wise将运算符“〜”转换为int? (从'int'转换为'unsigned char'可能会改变它的值)
#include <cstdlib>
int main(int , char*[]) {
unsigned char *dest = new unsigned char[16];
const unsigned char *src = new unsigned char[16];
for(size_t i = 0; i != 16; ++i) {
dest[i] = ~(src[i]);
}
return 0;
}
很显然,无论是src
和dest
都是指针的unsigned char
一个数组,我只希望,后者是前者的逐位否定。出于一些奇怪的原因,~
运营商似乎返回int
,从而触发警告。为什么?这是预期的行为?
当然,我知道我可以使用static_cast<unsigned char>()
来防止警告,但我觉得其他的东西是错的,警告不应该在那里。