Почему операции сдвига всегда приводят к целому знаку со знаком, если операнд <32 бит

Почему операции сдвига с целыми числами без знака дают результат без знака, а операции с меньшими операндами без знака приводят к целому числу со знаком?

int signedInt = 1;
int shiftedSignedInt = signedInt << 2;

uint unsignedInt = 1;
uint shiftedUnsignedInt = unsignedInt << 2;     //OK. unsigned result

short signedShort = 1;
int shiftedsignedShort = signedShort << 2;

ushort unsignedShort = 1;
uint shiftedUnsignedShort = unsignedShort << 2; //CS0266: Can't cast int to uint

sbyte signedByte = 1;
int shiftedSignedByte = signedByte << 2;

byte unsignedByte = 1;
uint shiftedUnsignedByte = unsignedByte << 2;   //CS0266: Can't cast int to uint
12
задан GazTheDestroyer 9 February 2012 в 11:52
поделиться