Buongiorno a tutti,

mi chiamo Federico. Sono un principiante nell'ambito della programmazione, tanto che ho appena iniziato a studiare Java (8), tramite un buon libro/manuale che consiglio.
Tale libro è stato scritto dall'autore Claudio De Sio Cesari.
A parte ciò, dopo aver iniziato a studiare i "TIPI DI DATI PRIMITIVI", e più precisamente quelli INTERI (byte, short, int, long) ho riscontrato delle difficoltà nel capire i concetti di Cast/Casting e Promotion.
Nell'esempio riportato:

byte b = 50;
b = b * 2;

La seconda istruzione da un errore in compilazione, poiché il compilatore non esegue l'operazione di moltiplicazione, ma promuove entrambi gli operandi ad "int" e quindi un "int" non può essere immagazzinato in "b" che è un "byte". Fino a qui ho capito.

Come dice il libro:

(50 * 2) è immagazzinabile in un "byte", e per fare ciò si utilizza il Cast/Casting che forza una certa quantità ad essere immagazzinata in un certo tipo di dato. Per farlo:

b = (byte) (b * 2);

Invece, se noi scrivessimo:

b = (byte) 128;

Non ci sarebbero errori in compilazione, ma la variabile "b" avrà valore " - 128 " e non " 128 ".
Questo è il problema. Non capisco perché si ottiene quel valore.
Qualcuno, gentilmente, mi potrebbe aiutare?
Grazie in anticipo, e buona giornata.