MUSTERLÖSUNG BLATT 2

A2.1:
Bitdarstellung von a:	00000101		Bitdarstellung von b:	00100001
(a)	a und b sind Variablen vom Typ int (= Ganzzahl), also wird auch die Division ganz-zahlig durchgeführt, d.h. der Nachkommateil einfach abgeschnitten  b / a = 6
(b)	b % a = 3 (Rest der Division aus (a))
(c)	33 (das “Ergebnis” von a = b ist eben der Wert von b)
(d)	FALSE (a ist nicht gleich b)
(e)	20 ( = 2 * 2 * a)
(f)	16 ( b / 2 ganzzahlig)
(g)	~a = 11111010 	~a | b = 11111011
 				 a ^ b = 00100100
(~a | b) & (a ^ b) = 00100000 (das “Ergebnis” ist also 32)
(h)	(a < b) TRUE		((c – d) != a) TRUE
 (a < b) && ((c – d) != a) TRUE
(i)	Die Reihenfolge der Auswertung von Teilausdrucken (b * a++) und (c % ++a) ist undefiniert (also Compilerabhängig). 
	Allgemein gilt:    (b * a++)   (a wird nach der Operation um eins erhöht)
         		    (c % ++a)      (a wird vor der Operation um eins erhöht) 		Bei Visual Studio C++ ist  (b * a++)–(c % ++a)=33*5-51%6=162
(j)	~a = 11111010 != 0, also TRUE, d.h. der zweite Teil des dreistelligen ?: - Operators wird ausgeführt:
b * c = 1683

A2.2:
(a)	int e = (--c) – (d / a);
e = -150;
(b)	boolean f = (b <= a) || (c >> 16);
f = false;
(c)	int g = (a & b) ? ((b % a) + 1) : (a + (b / c));
g = 4;
(d)	boolean h	 = (a < 5) || ((b > 10) && ((d – c) >= 0));
h = true;
(e)	int i = ((~a) * b) << a; 
i = (-6 * 33) * 32 = - 6336;                                                                      

	
A2.4:
(a)	024 = (24)8 = (2* 81) + (4 * 80) = 20
(b)	0xCAFEBABE 	= (CAFEBABE)16   
                        = (12 * 167) + (10 * 166) + (15 * 165) + (14 * 164) + (11 * 163) + (10 * 162) + (11 * 161) + (14 * 160) 
                        = (12 * 268435456) + (10 *16777216) + (15 *1048576) + (14 * 65536)
                       + (11 * 4096) + (10 * 256) + (11 * 16) + (14 * 1)
		= 3221225472 + 167772160 + 15728640 + 917504 
                        + 45056 + 2560 + 176 + 14 
		= 3405691582 
12.345e-4 = 12.345 * 10-4 = 12.345 * 0.0001 = 0.0012345