unsigned char a, b;
b = something();
a = ~b;
A static analyzer complained of truncation in the last line, presumably because b
is promoted to int before its bits are flipped and the result will be of type int.
I am only interested in the last byte of the promoted int - if b
was 0x55, I need a
to be 0xAA. My question is, does the C spec say anything about how the truncation happens, or is it implementation defined/undefined? Is it guaranteed that a
will always get assigned the value I expect or could it go wrong on a conforming platform?
Of course, casting the result before assigning will silence the static analyzer, but I want to know if it is safe to ignore this warning in the first place.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…