Как объяснить следующее поведение?
#include<iostream>
using namespace std;
int main(){
unsigned char a = 8;
cerr << "a: " << (int)a << '\n';
unsigned char b = (~a) >> 6;
cerr << "b: " << (int)b << '\n';
unsigned char c = (~a);
c = c >> 6;
cerr << "c: " << (int)c << '\n';
return 0;
}
Вывод:
a: 8
b: 255
c: 3
После дальнейшего тестирования кажется, что (~a)
становится int
, а не unsigned char
. Вот почему 1
получает смещение.
Что происходит?
EDIT: Мой компилятор является стандартным gcc 4.1.2