¿Por qué las operaciones de cambio en ints sin signo dan un resultado sin signo, pero las operaciones en operandos sin firmar más pequeños dan como resultado un int firmado?¿Por qué las operaciones de cambio siempre dan como resultado un int firmado cuando el operando es <32 bits
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
También agregue 'uint shiftedUnsignedByte = (uint) unsignedByte << 2U;' para obtener más información. –