Zeichenkodierung, ASCII Zeichen , eine kleine Verständnisfrage?
Ich habe, denke ich das Grundlegende der ASCII Zeichenkodierung verstanden, dass die Zeichen eine 7-Bit Codierung haben ect....
Ich habe mal eine Frage aufbekommen.1.Geben Sie die Werte der ASCII-Zeichen A, a, Z, z, @, 0, 1, 2...., 9 Dezimal, Binär und Hexadezimal an.
2.Wie kann man Kleinbuchstaben in Großbuchstaben umwandeln? Mit welcher logischen Operation ist dies (und auch der Weg von Großbuchstaben zu Kleinbuchstaben) möglich
Die erste Aufgabe habe ich gemacht, einfach die ASCII-Tabelle benutzt und das wars. Aber die Aufgabe 2. verstehe ich nicht, was soll es denn für logische Operationen geben um die Buchstaben umzuwandeln? Muss man das mit einem Programm machen, oder kann man die 2 Fragestellung auf einem Blatt Papier lösen?
4 Antworten
Sehr schöne Frage! DH!
1.Geben Sie die Werte der ASCII-Zeichen A, a, Z, z, @, 0, 1, 2...., 9 Dezimal, Binär und Hexadezimal an.
Merk dir einfach folgende Fixpunkte:
0x00-0x1F - Steuerzeichen
0x20 - Leerzeichen
0x21-0x2F - gängige Sonderzeichen
0x30-0x39 - Ziffern 0-9
ab 0x41 - Großbuchstaben
ab 0x61 - Kleinbuchstaben
Dezimal und Binär kannste dir selber ausrechnen.
Man sieht aber Binär schön den Unterschied zwischen Klein- und Großbuchstaben:
großes A: 0100 0001
kleines a: 0110 0001
Zwischen Groß- und Kleinbuchstaben ist also nur ein Bit anders
Deswegen macht man das ja auch so
2.Wie kann man Kleinbuchstaben in Großbuchstaben umwandeln? Mit welcher logischen Operation ist dies (und auch der Weg von Großbuchstaben zu Kleinbuchstaben) möglich
Zwei Möglichkeiten:
Entweder du subtrahierst einfach 0x20 bzw. 32
gross = klein + 0x20;
oder du setzt einfach das 3. Bit der oberen Tetrade auf Null. (du sollst es ja mit rein logischer Operation machen. Da würde ich folgendermaßen vorgehen:
Der Abstand ist 32 (=0x20). Also 0010 0000
Du komplementierst also diese zahl und erhälst 1101 1111
Wenn du diese zahl in dein Buchstaben rein"undest", dann erhälst du immer ein Großbuchstaben (Auf Bitebene "undest" du das entsprechende Bit also raus):
Bei C# würde das so gehen: gross = klein & ~0x20
Ob das bei Java bzw. C auch so funktioniert, bin ich mir nicht ganz sicher, da die 0x20 nicht als Objekt verstanden wird.
wenn du aber die 0x20 in eine Abstandsvariable (z.b. byte fix = 0x20;) schreibst, dann kannst du das auf jeden Fall so machen:
groß & ~fix
PS: Ich glaube bei C geht das auch direkt.
Schließlich geht da ja auch int i = ~0;
Bei Java bin ich mir trotzdem nicht ganz sicher. Das wäre aber doch rein logisch eine Option. Willst du von Groß auf Kleinbuchstaben, dann musst du halt die 0x20 rein"odern".
klein = groß | 0x20;
Aber die Aufgabe 2. verstehe ich nicht, was soll es denn für logische Operationen geben um die Buchstaben umzuwandeln? Muss man das mit einem Programm machen, oder kann man die 2 Fragestellung auf einem Blatt Papier lösen?
Wenn du Aufgabe 1 richtig machst und erkennst wie der Abstand zwischen beiden ist (nur ein Bit), dann kannst du das auch mit rein logischer Operationen lösen
Ich hoffe ich konnte dir helfen
Gruß Omni
PS: morgen rufe ich den Duden und Wahrig an und erbitte um Aufnahme der Wörter "rausunden" und "reinodern".
Wäre das jetzt eine logische Operation???
groß=0x20+klein
Das ist eine Streitfrage:
Rein auf die Digitaltechnik bezogen JA, denn alle arithmetischen Elemente im Rechenwerk sind auf Logikgatter aufgebaut: Siehe Halb- und Volladder
Betrachtet man es aber aus der Rechnerarchitektur, dann würde ich das verneinen, da die Subtraktion und Addition nun mal numerische Operationen sind. Auch in Assembler und in der Dokumentation zu Schlüsselwörtern und Operationen fallen [+,-,*,/,%] unter numerische Operationen und [&,|,~] unter logische Operationen.
Die Frage zu beantworten kommt auf den Auge des Betrachters an. Hierbei gibt es keine klare Antwort.
Ich komplemetiere die zahl, heißt das, ich invertiere sie?
aus 0 wird 1 und aus 1 wird 0 ?
exakta mundo
0010 0000 =1101 1111 Invertier ?
si senor
Das mit dem ,,undest'' habe ich nicht ganz verstanden.
Meinst du damit AND?
Ja damit meine ich das logische UND (=AND)
Der Grund ist folgender: Konrad Zuse war nun mal ein Deutscher. Und zu dessen Ehren redeten unsere Professoren und Dozenten immer weitestgehend Deutsch. Und die logischen Operationen kann man halt sehr gut mit deutschen Wörtern beschreiben.
"rausunden" und "reinodern" ist so ein Begriff, den ein Dozent immer benutzt hat. Ich finde diese Begriffe sehr treffend, weil man Beispielsweise mit diesen Strategien einzelne Bits auf null setzen kann (=reinunden) bzw. auf eins setzen kann (=reinodern)
Das hat sich bei mir/uns so eingebürgert. Und ich finde kein englischen Begriff der das besser beschreiben kann als rausunden und reinodern.
Und ich finde halt, dass man auch als Informatiker nun mal möglichst unsere schöne deutsche Sprache benutzen kann :-) Schließlich kommt aus unserem Land dessen Erfinder :-) Findest du nicht auch? ^^
mit dem XOR das weiß ich nicht, was das bedeutet.
mhhh, dann mach ich nochmal mit dir einen kleinen nachhilfekurs ^^
Die Wahrheitstabelle von UND kennst du ja:
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1
Bei ODER ist das ähnlich:
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
Bei UND müssen also ALLE Operanden 1 sein, damit das Ergebnis auch 1 ist
Bei ODER muss mindestens ein Operand 1 sein, damit das Ergebnis 1 ist.
lass mir zunächst noch etwas anderes zeigen:
0 0 | 1
0 1 | 0
1 0 | 0
1 1 | 1
Das nennt man Äquivalenz. Die Äquivalent ergibt 1, wenn die beiden Operanden die gleichen Werte haben. Also 0 und 0 ist 1.....und 1 und 1 ist 1
Was ist nun XOR? nun....Wahrheitstabelle:
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0
Wie du siehst ist XOR das genaue Gegenteil von der Äquivalenz. Deswegen hört es im Deutschen auch auf den Namen "Antivalenz"
XOR (also "exclusiv or") ist die englische Bezeichnung. Auch im Deutschen ist die Bezeichnung Exklusiv-Oder geläufig. Eine weitere bezeichnung ist es zu sagen "Entweder Oder". Denn genau das ist ein exklusives Oder: Es ist 1, wenn die Beiden Operanden unterschiedliche Wahrheitswerte haben: Also bei 0 und 1....und 1 und 0
Ist doch eigentlich ganz einfach...oder? ^^ Hoffe du verstehst das ^^
Wie würde ich jetzt die Aufgabe beschreiben müssen, damit ich die volle Punktzahl dadrauf bekomme? Also, einfach zack hinschreiben, wie würde es vollständig richtig sein?
Du meinst Aufgabe 2? Also:
Ich würde folgendes schreiben:
"Da Großbuchstaben von Kleinbuchstaben in der Asciitabelle genau um 32 verschoben sind könnte man einfach 32 subtrahieren. Da die Subtraktion in der Rechentechnik aber eine arithmetische Operation darstellt muss man prüfen ob eine rein logische Operation möglich ist. Da 32 eine 2er Potenz darstellt (32=2^5) kann man einfach das 6. Bit auf null setzen und man erhält immer ein Großbuchstaben. Großbuchstaben bleiben Großbuchstaben und Kleinbuchstaben werden zu Großbuchstaben. Um nur das 6. Bit auf null zu setzen muss man den Buchstaben mit einem logischen UND verknüpfen, bei dem lediglich das 6. Bit auf null ist. Verknüpft man also den Buchstaben mit dem Kompliment von 0x20 (also 0xDF bei 8Bit), dann erhält man immer den Kleinbuchstaben zu dem Großbuchstaben"
So würde ich das machen. Falls dein Lehrer das nicht anerkennt, kannst du ihn gerne an mich verweisen!
LG
Super gemacht, danke man, ich komme auf dich zurück, wenn ich weitere Fragen habe, ich verdaue das alles nochmal. Danke, am Freitag , also heute abend so gegen 20 Uhr poste ich eine andere Sache, die wir noch aufbekommen haben. Es geht um eine erstellung eines programms, aber das erst später. Danke danke danke ;)
Hallo, ich bin zwar extrem müde, aber ich will es noch etwas wissen.
Bitte nicht sauer sein, wenn ich die ganze Zeit löchere ok?^- ^
Ich bewerte dich auf jende Fall positiv, keine Angst
Du hast geschrieben :
,,Da 32 eine 2er Potenz darstellt (32=2^5) kann man einfach das 6. Bit auf null setzen und man erhält immer ein Großbuchstaben.''
Also, wir haben Die Dezimalzahl 32.
32 in Dual = 0100000
Du meinst, wenn ich jetzt von dieser Dualzahldarstellung das 6 bit auf null Setze, bekomme ich einen Großbuchstaben
Von wo soll ich anfangen zu zählen?
Wenn ich von rechts nach links zähle, bekomme ich dann 0000000
Das hast du bestimmt anders gemeint nehme ich an.
-----------
Ist AND sozusagen ein + ?
--------------
gross= klein + 0x20 anders geschrieben
A= a+ 0x20 anders geschrieben
0x41=0x61+0x20 Kann das sein? Muss da nicht ein Minus hin?
Und diese Rechnung ist sozusagen ein arithmetische Operation, weil das ein Plus ist?
-----------
will ich eine reine logische Operation, dann muss ich doch das hier machen.
Kleinen Buchstaben a ins Binär Umwandeln
1100001
-32 ins Binär umwandeln
erstmal ohne Vorzeichen die Zahl aufschreiben
32=0100000 Das invertieren
32 = 1011111
0000001 dazuzähen also AND?
----------------------------------
100000
-32 = 100000
A= 1100001 - 100000 Wäre es so richtig oder was?
-----------
In Dezimalschreibweise
65=97-32
32 in Dual = 0100000
Ich würde IMMER die Darstellung in vollen Bytes machen. Jedes zahlenformat im Rechner hat immer einen Faktor von Byte: (1byte, 2byte, 4byte, 8byte).
Also IMMER so:
0010 0000
Von wo soll ich anfangen zu zählen?
IMMER von rechts nach links!
Wenn ich von rechts nach links zähle, bekomme ich dann 0000000
Du verstehst mich nicht. Wenn man aus einem kleinen "a" (=0110 0001) ein großes "A" machen will, dann muss man das 6. Bit auf 0 setzen: 0100 0001
Und das machst du indem du den Wert des 6. Bits (=32) auf null setzt. Du "undest" also eine Zahl rein, die KOMPLETT auf 1 ist...außer eben am 6. Bit
Ist AND sozusagen ein + ?
Nein...ein plus ist ein plus. In Programmiersprachen ist es eine normale Addition. In Logikdarstellungen ist das plus ein ODER.
In unserem Fall hier ist ein Plus eine Addition!
0x41=0x61+0x20 Kann das sein? Muss da nicht ein Minus hin?
Hab ich anfangs geschrieben:
Entweder du subtrahierst einfach 0x20 bzw. 32
Leider hab ich die Formel danach falsch hingeschrieben, 'tschuldigung. JA minus
Und diese Rechnung ist sozusagen ein arithmetische Operation, weil das ein Plus ist?
rechentechnisch sind + und - natürlich arithmetische Operationen.
Betrachtet man es aber auf Basis der Digitaltechnik ist es egal, da ALLE Gatter Logik-Gatter sind.
-32 ins Binär umwandeln
erstmal ohne Vorzeichen die Zahl aufschreiben
Du machst dir das vieeeel zu komplimiert
Du brauchst hier nicht mit Vorzeichen und so aufschreiben
32 = 1011111
0000001 dazuzähen also AND?
Nur mal so nebenbei: Beim Zweierkompliment wird nach der Negation PLUS eins gerechnet und nicht "UND" eins. Machst du UND 1 kommt - oh wunder - 0000 0001 raus.
Wir brauchen hier aber keine Subtraktion. Auf Logikebene arbeitet sich besser
In Dezimalschreibweise
65=97-32
korrekt
Die Aufgabe kannst du mit Bleistift und Papier (bzw. Kugelschreiber und Papier) lösen.
"logische Operationen" bezieht sich hier auf die "Schaltalgebra", angewendet auf die 7 Bits des ASCII-Codes.
Zur Information: In der Schaltalgebra bezeichnet man im allgemeinen einen Wert von ca. 0 V als "logisch 0" bzw. "falsch", und einen Wert von ca. der positiven Versorgungsspannung als "logisch 1" bzw. "wahr".
Die wichtigsten logischen Operatoren sind "und", "oder" und "nicht".
"nicht" macht aus jeder 0 eine 1 und umgekehrt. Beispiel (4 bit):
nicht 0101 = 1010
"und" lässt nur dann eine 1 stehen, wenn beide Operanden 1 sind, und ergibt sonst eine 0. Beispiel (4 bit):
0101 und 0011 = 0001
"oder" lässt nur dann eine 0 stehen, wenn beide Operanden 0 sind, und ergibt sonst eine 1. Beispiel (4 bit):
0101 oder 0011 = 0111
Vereinfacht kannst du in bestimmten Fällen auch sagen, dass ein bestimmtes Bit "gesetzt" oder "gelöscht" wird.
Okey, Schaltalgebra sagt mir vieles, ich habe dieses Thema in Mathe behandelt zusammen mit Aussagelogiken.
0V? Was ist V? Meinst du Volt?
,,und'' ,,oder'' und ,,nicht'' kenne ich aus der Mathematik.
Aber in englisch gibt es AND, OR und XOR. Bedeutet dann XOR oder?
das mit der Umkehrung habe ich verstanden
kleiner Transfer, NOT 1000001= 01111110 richtig?
AND habe ich dann auch verstanden, kleiner Transfer
101010 AND 001100= 001000
OR habe ich auch verstanden . Kleiner Transfer
11000 ODER (XOR?) 01110= 1110
Also, könnte ich diese gestellte Aufgabe so beantworten.
Die logischen Operationen sind AND OR, and (XOR?)
Mit denen kann man Großbuchstaben in kleine Buchstaben umwandeln.
ASCII-Zeichen ( A)= 65 Dezimal
65Dezimal = 1000001 Binär.
hmm jetzt weiß ich immernoch nicht, wie ich das umwandeln soll, obwohl ich AND, OR und XOR kenne. Na ja XOR kenne ich nicht, ich weiß ja noch nicht , was es bedeutet, kannst du mir weiterhelfen?
0V? Was ist V? Meinst du Volt?
ja.
Aber in englisch gibt es AND, OR und XOR. Bedeutet dann XOR oder?
AND = UND, OR = ODER, NOT = NICHT, XOR = Exklusives Oder (Entweder-Oder)
(0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 = 1, 1 XOR 1 = 0)
NOT 1000001= 01111110 richtig?
ja.
101010 AND 001100= 001000
ja.
11000 ODER (XOR?) 01110 ...
11000 OR 01110 = 11110
11000 XOR 01110 = 10110
-----
ASCII-Zeichen "A"= 65 Dezimal = 100 0001 binär
(ähnlich wie wir Dezimalziffern in 3er-Gruppen teilen, teilt man Binärziffern gern in 4ergruppen)
ASCII-Zeichen "a"= 97 Dezimal = 110 0001 binär
"A" und "a" unterscheiden sich also in Bit 5. (Die Zählung wie üblich mit 0 beginnend von rechts, 2^Bitnummer = Wertigkeit der Stelle)
Man kommt von "A" nach "a" durch Setzen von Bit 5, und von "a" nach "A" durch Löschen von Bit 5.
XOR brauchst du hier nicht.
Jetzt such mal 2 "Bitmasken", sodass man mit
Großbuchstabe AND/OR Maske1
den zugehörigen Kleinbuchstaben enthält, und mit
Kleinbuchstabe AND/OR Maske2
den zugehörigen Großbuchstaben enthält.
Wo du AND und wo OR verwenden musst, überlasse ich auch dir.
Wenn du Spaß daran hast, kannst du ja auch entsprechendes für XOR versuchen. Tipp: Hier kannst du für beide Richtungen dieselbe Operation nehmen.
Du kannst einfach die ASCII Werte (die Codierung) mit einem Wert addieren bzw. subtrahieren, so dass du halt von klein auf groß und andersherum kommst
Tipp: A = 65 ; a = 97 ; B = 66 ; b =98
Hmm, du meinst, ich addiere +33 . Wie kann ich das informatisch beantworten? Wenn ich aufschreiben, man addiert einfach +33 , dann bekomme ich sicherlich keine voll Punktzahl, wenn dies in der Klausur abgefragt wird. xD
Den Dezimalwert des Großbuchstabens +32 ergibt den Dezimalwert des Kleinbuchstaben. Umgekehrt dementsprechend -32
Also ist das ACSII Zeichen A=65 und dass kleine a dann -65?
Nein. A=65 a=97
65+32=97 So kommst du von dem Großen zum kleinen a
Also würde die antwort auf die 2. Fragestellung so lauten
65 + 32 = 97
Dafür hätte ich jetzt die volle Punktzahl?
______
x+32=y um von Großen auf die kleinen Buchstaben zu wechseln
y-32=x um von Kleinen auf die Großen Buchstaben zu wechseln
x steht dabei für ASCII des großen Buchstaben
y steht für ASCII des kleinen Buchstaben
also gilt:
für x=65[A] ist y=65+32=97[a]
für y=98[b] ist x=98-32=66[B]
______
MfG ParamoxizZ
Die Fixpunkte haben ich mir jetzt gemerkt, danke dazu.
Wäre das jetzt eine logische Operation???
groß=0x20+klein
-----
Ich komplemetiere die zahl, heißt das, ich invertiere sie?
aus 0 wird 1 und aus 1 wird 0 ?
-----
0010 0000 =1101 1111 Invertier ?
-----
Das mit dem ,,undest'' habe ich nicht ganz verstanden.
Meinst du damit AND? Weil wir haben mit den englischen Wörtern angefangen. AND OR,, mit dem XOR das weiß ich nicht, was das bedeutet.
Wie würde ich jetzt die Aufgabe beschreiben müssen, damit ich die volle Punktzahl dadrauf bekomme? Also, einfach zack hinschreiben, wie würde es vollständig richtig sein?