short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
Il codice precedente dovrebbe essere un esempio (inefficiente) che scambia la endianità di un breve (numero intero a 16 bit con segno) in C#.C# Operazioni bit a bit su cortocircuiti - Perché trasmettere a un int?
Tuttavia il codice di cui sopra non viene compilato perché C# è implicitamente lanciando da una breve ad un int in entrambe le seguenti linee:
Primo caso:
short test1 = ((value >> 8) & 0xFF);
Secondo caso:
return (test1 | test2);
Perché questo cast ha luogo? Potrei ottenere il risultato atteso semplicemente riconducendolo a un breve? Così:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
Se no, perché no?
Nota che capisco perché C# converta un numero breve in un numero intero quando si esegue un bit shift a sinistra, quindi l'assegnazione della variabile test2.
non ho votato per chiudere come duplicato, ma questo è significativamente simile a http://stackoverflow.com/questions/941584 –
Forse dovrei spiegare perché non trovo le risposte alle domande esistenti sull'aggiunta pertinente. Con l'aggiunta c'è la possibilità di overflow, proprio come avviene con l'assegnazione di test2. Capisco quelle circostanze. Tuttavia, nelle due situazioni che ho delineato non c'è possibilità di overflow. –