Diese "Diskussion" ist schon aus dem Ruder gelaufen. Ich empfehle daher Schliessung.
Ob simonko aus dem Forum ausgeschlossen werden sollte ueberlasse ich den Moderatoren.
Das Basisproblem der Frage steht ganz am Anfang:
"Nun hab ich aber ein PROBLEM da das ganze auch auf linux laufen soll. Und da ist char manchmal als 2 byte? short ist auch nicht immer 2 byte lang. Hab schon lange daran herumgeräzelt."
Die Annahme ein char kann 2 Byte haben ist schlicht falsch. Der C Standard spricht maximal davon das ein Byte nicht 8 Bit haben muss.
Ein short kann tatsaechlich nur 1 Byte haben, aber das trifft nur auf exotische Geraete wie embedded Devices zu.
Einen Z80 Simulator darauf laufen zu lassen ist doch eher sinnlos. Einen
ANSI-C-Compiler fuer so ein Geraet zu finden ist wahrscheinlich aussichtslos.
Ein Byte mit mehr oder weniger Bits als 8 ist sehr exotisch und die zugehoerigen Computer stehen meist im Museum.
Ihre Performance ist wahrscheinlich einer Z80 CPU unterlegen. Einen
ANSI-C-Compiler fuer so eine Maschine zu finden ist aussichtslos.
Um auf die urspruengliche Frage zurueckzukommen, ist eine union die beste Loesung.
Man braucht dort allerdings Ueberlagerungen von signed und unsigned Varianten der 8- Bit und 16-Bit Register, damit man die Atithmetik effizient implementieren kann.
Zusaetzlich braucht man wahrscheinlich noch 32-Bit Ueberlagerungen fuer die 16-Bit Register, damit man die arithmetischen Ueberlaeufe effizient handhaben kann.