>>33,35
unsigned intだと負数との比較のときとか厄介じゃん?

範囲チェックしたいときとかさ、

struct
{
 unsigned int value: 4;
} border;

int checked_value = 何か;

if ( border.value<=checked_value )
{
 checked_value unsigned int に格上げされるので、負のとき危険
}