Странное битовое поведение НЕ (~)

Как объяснить следующее поведение?

#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

11
задан Adam Rosenfield 28 August 2011 в 05:50
поделиться