Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bitte um Hilfe

1 view
Skip to first unread message

Wolfgang Schulz

unread,
Oct 3, 2002, 11:31:18 AM10/3/02
to
Hallo S.,

On Wed, 2 Oct 2002 15:48:55 +0200, "S.Schweizer" <ser...@t-online.de>
wrote:

>Kann mir bitte jemand erklaren was der Satz "charWert = (char) intWert"
>bedeutet, und wieso es als antwort 10 und a gibt?

Der Reihe nach:

Ein Computer kann intern nur Nullen und Einsen speichern. Somit muß
jedes Zeichen intern durch eine Kombination aus Nullen und Einsen
repräsentiert werden. Welches Zeichen welcher 0-1-Kombinatione
entspricht, hängt von der verwendeten Zeichentabelle ab.

Eine der verbreitesten Zeichentabellen ist die ASCII-Tabelle. In ihr
hat das "A" die Entsprechung 01000001. Wenn man diese Binärzahl in
eine Deziamlzahl umwandelt, kommt man auf 65.

Das dürfte einen Teil Deiner Frage beantworten. Wenn ich einer
Variable vom Typ "char" die Dezimalzahl 65 zuweise, beinhaltet diese
Variable dann ein großes A.

Der zweite Teil ist etwas schwieriger zu verstehen. Die Anweisung
"charWert = (char) intWert" beinhaltet einen sog. Cast, d.h. das
Umwandeln eines Datentyps in einen anderen. Im Vorliegenden Fall
handelt es sich um einen Downcast, d.h. der Zieldatentyp ist kleiner
als der Quelldatentyp. Das bedeutet, daß beim Cast Information
verlorengehen kann, was im vorliegenden Fall auch eintritt.

Ein "int" ist, je nach Zielsystem, 16, 32 oder 64 Bit breit. Ein
"char" hat i.d.R. 8 Bit, es gibt aber auch Architekturen, in denen er
16 Bit breit ist. Da Du Dein Zielsystem nicht dazugeschrieben hast,
gehe ich mal vom hüfigsten Fall aus, d.h. ein 32-Bit-Betriebsystem auf
einer Intel-Architektur (auf Deutsch: Windows, Linux oder Netware auf
einem PC). In diesem Fall ist der "char" 8 Bit groß, der "int" 32.

In 8 Bits passen 256 verschiedene Informationen hinein, d.h. Werte
zwischen 0 und 255 (jeweils einschließlich), oder, wenn der Datentyp
Vorzeichenbehaftet ist, Werte zwischen -128 und +127. Der Datentyp
"char" ist üblicherweise Vorzeichenbehaftet, der "int" ist es immer.

Wenn Du nun einem "int" den Wert 266 zuweist, dann ist das mehr, als
ein char aufnehmen kann. Beim Downcast wird also der Rest
abgeschnitten. Sehen wir uns dazu das Bitmuster an:

0000 0000 0000 0000 0000 0001 0000 1010

Davon werden beim Cast alle Stellen bis auf die letzten 8
abgeschnitten. Übrig bleibt also:

0000 1010

Diese Binärzahl entspricht der Dezimalzahl 10.

Neben Binärzahlen und Dezimalzahlen gibt es noch viele andere
Zahlensystem. In der Computertechnik findet man davon noch das
Oktalsystem und das Hexadezimalsystem. Einen Vortrag über Zahlensystem
will ich jetzt allerdings nicht halten, das würde zu weit führen.
Vielleicht noch so viel: Die Dezimalzahl 10 wird als Hex-Zahl a oder A
dargestellt. Die Hex-Zahl 10 ist Dezimal eine 16 usw.

>int main(void)
>{
>char charWert = 65;
>int intWert = 266;
> charWert = (char) intWert;
> printf("%i \n", charWert );
>printf("%x \n", charWert );

Dieser Code arbeitet wie folgt:

- Der Variablen "cahrWert" wird ein großes A zugewiesen.
- Der Variablen "inWert" wird der Wert 266 zugewiesen.
- Der Inhalt von "intWert" wird mittels Downcast nach
"charWert" zugewiesen. Von der 266 bleiben nur 10
übrig (vgl. oben).
- Der Inhalt von "charWert" wird als Ganzzahl interpretiert
und ausgegeben. -> 10
- Der Inhalt von "charWert" wird als Hex-Zahl interpretiert
und ausgegeben. -> a

Versuche mal noch folgende Variante:

int main(void)
{
char charWert = 65;
int intWert = 266;
printf("%c \n", charWert );
charWert = (char) intWert;
printf("%i \n", charWert );
printf("%x \n", charWert );

Aber aufpassen! Die erste und dritte Ausgabe sind nur zufällig so.
Wenn Du die erste Zeile in z.B. "char charWert = 67;" änderst, ändert
sich auch die erste Ausgabe entsprechend. Probier's einfach mal aus!

HTH

Und wech,

Wolfgang Schulz

--

e-Mail: hrz...@gmx.de

Christian Forler

unread,
Oct 3, 2002, 4:45:00 PM10/3/02
to
S.Schweizer <ser...@t-online.de> wrote:

> Kann mir bitte jemand erklaren was der Satz "charWert = (char)
> intWert" bedeutet, und wieso es als antwort 10 und a gibt?

man (explizite) Typenkonvertierung
man Formatparameter

cu,
Shortie

--
Security is a direction you can travel in, but you'll never actually
arrive at the destination. What you can do is managing your acceptable
level of risk.
-The Process of Network Security-

0 new messages