Un bug del compilatore?

leo72:
No, ottieni 2000.
Questo perché, come ti ho scritto, il compilatore fa sì che l'operazione venga eseguita usando il tipo di dati più grande necessario a contenere i valori in gioco e solo alla fine viene convertito il risultato per il tipo di dato in uso.
Ora, siccome 200*10 va oltre il tipo byte, il compilatore fa usare un int (16 bit), ottieni così 2000 che viene memorizzato in una variabile di tipo int. Siccome int in un int ci sta, non hai nessun "pezzo" perso per la strada.

no. concordo sul risultato ma non sul motivo.
scrivere "a10" da per implicito che 10 sia un int, quindi:
int b=a
10;
sarà 2000
se fai
a = a*10;
l'operazione darà 2000 (perchè 10 è un int), ma poi verrà troncata in byte

prova a fare uno skect di esempio:
2000 trocanto in byte credo sia 0 (caso a = a10;)
se invece fai
byte b=10;
byte a=200;
a=a
b; //in modo che entrambi i membri siano forzatatmente in binario

dovresti trovare un risultato diverso, credo (dovrei fare i conti)