Frage von Angrodo, 41

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?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Omnivore08, 41

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".

Kommentar von Angrodo ,

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?

Kommentar von Omnivore08 ,

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

Kommentar von Angrodo ,

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 ;)

Kommentar von Omnivore08 ,

Kein Problem :)

Bitte bitte bitte

Kommentar von Angrodo ,

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

Kommentar von Omnivore08 ,

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

Kommentar von Angrodo ,

Ok danke ^.^

Kommentar von Omnivore08 ,

Danke für den Stern!

Antwort
von PWolff, 35

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.

Kommentar von Angrodo ,

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? 

Kommentar von PWolff ,

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.

Kommentar von Angrodo ,

Ok danke

Antwort
von ParamoxizZ, 41

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

Kommentar von Angrodo ,

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

Antwort
von Nemesis900, 40

Den Dezimalwert des Großbuchstabens +32 ergibt den Dezimalwert des Kleinbuchstaben. Umgekehrt dementsprechend -32

Kommentar von Angrodo ,

Also ist das ACSII Zeichen  A=65  und dass kleine a dann -65?

Kommentar von Nemesis900 ,

Nein. A=65 a=97
65+32=97 So kommst du von dem Großen zum kleinen a

Kommentar von Angrodo ,

Also würde die antwort auf die 2. Fragestellung so lauten

65 + 32 = 97

Dafür hätte ich jetzt die volle Punktzahl?

Kommentar von ParamoxizZ ,

______

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

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten