2011-01-19 13 views
6
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.

+0

no he votado a cerrar como duplicado, pero esto es significativamente similar a http://stackoverflow.com/questions/941584 –

+0

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. –

Respuesta

0

Esto se responde básicamente en otra respuesta (incluso si la pregunta es bastante diferente) por el propio Eric Lippert.

Tome una mirada Integer summing blues, short += short problem

+0

Esa pregunta no es ni remotamente la misma, ni ha sido marcada como respondida. –

+1

@Benjamin: solo como referencia, el hecho de que el solicitante original no haya elegido aceptar una respuesta no significa que no haya sido respondida. Mucha gente parece que nunca lo hace o comprende que se supone que deben hacerlo. Por lo general, puede contar más acerca de la calidad de una respuesta en particular por el número de votos recibidos de la comunidad, en lugar de si se acepta o no. –

+1

La parte importante de esa respuesta es que habla de todas las operaciones cortas que acaban como int. Como dije, la pregunta es diferente, pero la respuesta será básicamente la misma. Ese short es igual a int. –

Cuestiones relacionadas