Übungsblatt 1 - Rechnerorganisation

Gbi, Algo, Mikrorechner - alles was es eben so gibt

Übungsblatt 1 - Rechnerorganisation

Beitragvon mabl » 30.04.2009 15:54

Have fun
Dateianhänge
blatt1.pdf
(22.51 KiB) 564-mal heruntergeladen
Benutzeravatar
mabl
Site Admin
 
Beiträge: 741
Registriert: 25.10.2008 11:28
Wohnort: Ettlingen, Karlsruhe

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon moggi » 01.05.2009 16:35

Hi, kann fast alles bestätigen.

Ausnahme:

~0x1234 = -4661

dort komm ich auf:
~0x1234= FFFFEDCB
moggi
 
Beiträge: 60
Registriert: 10.11.2008 01:16

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon mabl » 01.05.2009 17:22

Das kommt jetzt ganz drauf an, in welchem Datenyp wir uns bewegen...

Code: Alles auswählen
#include <stdio.h>

int main() {
  int a = ~0x1234;
  printf("Unsigned int: %x\n", a);
  printf("Signed int: %i\n", a);
}


Liefert dann:
Code: Alles auswählen
Unsigned int: ffffedcb
Signed int: -4661
Benutzeravatar
mabl
Site Admin
 
Beiträge: 741
Registriert: 25.10.2008 11:28
Wohnort: Ettlingen, Karlsruhe

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon miriam » 01.05.2009 20:17

ich komm bei

h= ~f | ~g auf 15
7=0111 => ~7= 1000 und 8=1000 => ~8= 0111
dann 1000|0111= 1111 =15 oder

wo kommt bei dir da des minus her?

und noch ne frage wie kann ich g um f also sieben stellen nach linksverschieben wenn g nur 4 stellen in binärdarstellung hat? für ich einfach rechts 7 nullen an?
is mir irgendwie nciht ganz kla


lg miriam
miriam
 
Beiträge: 96
Registriert: 30.10.2008 15:45

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon mabl » 01.05.2009 20:39

Zunächst ein mal musst du dir hier klar werden, dass es sich um C-Integer Variablen handelt. Das bedeutet, sie sind mindestens 16 Bit breit, meist 32 Bit. Wenn du hier einen Wert invertierst, so werden die gesamten 16/32 Bit invertiert. (Siehe auch bei dem Beispiel oben, wo ~0x1234=FFFFEDCB ist, also 16 Bit mehr mit FFFF aufgefüllt sind, als vorher angegeben waren.)

Also wie kommen wir hier auf unsere Werte.

Code: Alles auswählen
7  (dez) = 0000 0000 0000 0111 (bin)
~7 (dez) = 1111 1111 1111 1000 (bin)

8  (dez) = 0000 0000 0000 1000 (bin)
~8 (dez) = 1111 1111 1111 0111 (bin)

~7 (dez) = 1111 1111 1111 1000 (bin)
~8 (dez) = 1111 1111 1111 0111 (bin)

~7 | ~8  = 1111 1111 1111 1111 (bin)


Jetzt müssen wir betrachten, dass wir hier eine vorzeichenbehafte Representation einer Zahl haben. Ich denke du hattest das im letzten Tut, aber das hatte ich ja nicht. Anyway, die führende Eins sagt uns jetzt, dass es sich um eine negative Zahl handelt.

1111 1111 1111 1111 entspricht also unserer Zahl im Zweierkomplement. Wir müssen also die Zahl invertieren (dezimal 0), und eins Addieren, so kommen wir auf -1.

Ich habe übrigens die ganzen Rechnungen einfach in ein C Programm eingetragen, da geht das alles ziemlich schnell ;)


und noch ne frage wie kann ich g um f also sieben stellen nach linksverschieben wenn g nur 4 stellen in binärdarstellung hat? für ich einfach rechts 7 nullen an?
is mir irgendwie nciht ganz kla

Einer Variable wird (meistens) vorher schon der Speicherplatzbedarf zugewiesen, was in unserem Fall durch die Anweisung int geschehen ist. Dies steht für einen vorzeichenbehafteten Integer. Wie oben schon erwähnt, ist ein Integer mindestens 16 Bit lang. 7 und 8 kannst du also noch ein paar Bits nach links schieben, bis sie zuerst eine negatives Ergebnis hervorrufen, und die Bits danach abgeschnitten werden.

Code: Alles auswählen
8 (dez) = 0000 0000 0000 1000 (bin)
8 << 7  = 0000 0100 0000 0000 (bin) = 1024 (dez)
Benutzeravatar
mabl
Site Admin
 
Beiträge: 741
Registriert: 25.10.2008 11:28
Wohnort: Ettlingen, Karlsruhe

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon M.A. » 02.05.2009 18:15

bei der 1) steht doch nichts dran wegen dateityp und signed/unsigned. Da steht nicht, dass das jetzt C-Variablen sein müssen, man soll bloß C-Operationen auf Zahlen ausführen. ich würde daher einfach folgendes machen:
Code: Alles auswählen
0x1234 = 0001 0010 0011 0100
~ NOT -> 1110 1101 1100 1011 = 0xEDCB

ohne Vorzeichen und führenden Fs.
Bild
Benutzeravatar
M.A.
 
Beiträge: 366
Registriert: 25.10.2008 16:37

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon mabl » 02.05.2009 22:46

M.A. hat geschrieben:ich würde daher einfach folgendes machen:
Code: Alles auswählen
0x1234 = 0001 0010 0011 0100
~ NOT -> 1110 1101 1100 1011 = 0xEDCB

ohne Vorzeichen und führenden Fs.


Das scheint mir die sinnvollste Herangehensweise :geek:
Benutzeravatar
mabl
Site Admin
 
Beiträge: 741
Registriert: 25.10.2008 11:28
Wohnort: Ettlingen, Karlsruhe

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon Mammutbaum » 05.05.2009 13:44

ich denke einmal denen ging es vor allem darum das wir halt mal mit den Bitweisen Operatoren arbeiten, häten die gewollt das wir in Datentypen rechnen häten sie es dazugeschrieben....
Mammutbaum
 
Beiträge: 18
Registriert: 12.11.2008 19:35

Re: Übungsblatt 1 - Rechnerorganisation

Beitragvon moggi » 05.05.2009 17:48

Hi,

mein Tutor meinte dazu, wir sollen mit 32 bit Werten rechnen falss nötig. Daher kommt beid er Negation dann FFFFEDCB heraus.
moggi
 
Beiträge: 60
Registriert: 10.11.2008 01:16


Zurück zu Informatik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron