short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
El código anterior se supone que es un ejemplo (ineficaz) que intercambia la endianidad de un corto (entero de 16 bits con signo) en C#.C# Bitwise Operaciones en cortocircuitos - ¿Por qué lanzar a int?
Sin embargo, el código no se compilará debido a que C# es emitir implícitamente de un corto a un int en ambas de las siguientes líneas:
Primer caso:
short test1 = ((value >> 8) & 0xFF);
Segundo caso:
return (test1 | test2);
¿Por qué se realiza este yeso? ¿Lograría el resultado esperado simplemente volviendo a un corto? De esta manera:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
If not why not?
Tenga en cuenta que entiendo por qué C# arroja un cortocircuito a un número entero al realizar un desplazamiento de bit izquierdo, de ahí la asignación de la variable test2.
no he votado a cerrar como duplicado, pero esto es significativamente similar a http://stackoverflow.com/questions/941584 –
Tal vez debería explicar por qué no encuentro las respuestas a las preguntas existentes sobre la adición relevante. Con la adición existe la posibilidad de desbordamiento, al igual que con la asignación de test2. Entiendo esas circunstancias Sin embargo, en las dos situaciones que he descrito no hay posibilidad de desbordamiento. –