2011-11-17 12 views
8

In Java un'operazione bit a bit causa il cast di tipo a numero intero e causa anche l'estensione del segno. Per esempio si prevede la seguente:In Java, perché digita il casting di un carattere in un intero NON estende il bit di segno

byte b = -1; 
System.out.println(b >> 1);//-1 

In caratteri Java sono codificati in UTF-16 e ciascuna unità è rappresentato con 2 byte.

char c = 0xFFFF; //I assume now the sign bit is 1. 
System.out.println(c >> 1);//32767 ???? WHY 

mi aspettavo -1 invece di 32767. Perché è il segno non esteso durante il lancio di tipo prima dell'operazione bit a bit viene applicata? Qualche idea?

risposta

12

Perché char non è firmato - 0xFFFF ha davvero un valore di 65535

+3

Non voglio essere schizzinoso ma '0xFFFF' è 65535 – jeha

+0

@jeha: grazie, risolto –

3

Funziona come che a causa di widening primitive conversion che viene eseguita su argomenti di turno. Ovvero non c'è perdita di informazioni, incluso il segno del tipo che viene convertito.

Problemi correlati