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

+0

non ho votato per chiudere come duplicato, ma questo è significativamente simile a http://stackoverflow.com/questions/941584 –

+0

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

risposta

0

In pratica si risponde a un'altra risposta (anche se la domanda è molto diversa) dallo stesso Eric Lippert.

Date un'occhiata Integer summing blues, short += short problem

+0

Questa domanda non è nemmeno lontanamente uguale, né è stata contrassegnata la risposta. –

+1

@ Benjamin: solo per riferimento, il fatto che il richiedente originale non abbia scelto di accettare una risposta non significa che non abbia ricevuto risposta. Molte persone non sembrano mai riuscire ad aggirarla, o capire che dovrebbero farlo. Di solito puoi dire di più sulla qualità di una particolare risposta in base al numero di voti ricevuti dalla comunità, piuttosto che sul fatto che sia accettata o meno. –

+1

La parte importante di questa risposta è che parla di tutte le operazioni brevi che terminano come int. Come ho detto, la domanda è diversa, ma la risposta sarà fondamentalmente la stessa. Quel corto short equals int. –

Problemi correlati