www.vorwissen.de
Ein Projekt von vorhilfe.de
Das gesammelte Wissen der Vorhilfe
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - int i = char c? geht das?
int i = char c? geht das? < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

int i = char c? geht das?: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:32 Di 01.06.2010
Autor: misterET

Hallo!
Es geht bei mir darum, ob ich schreiben kann:
int i;
char c;

c = 0b00110011;
i = c;

Ist dann i = 110011?
Es geht mir hier nur um die Bitkonfiguration.
Oder ist es verboten, da unterschiedliche Datentypen?
Muss man vllt schreiben i = (int)c ?

        
Bezug
int i = char c? geht das?: Antwort
Status: (Antwort) fertig Status 
Datum: 17:10 Di 01.06.2010
Autor: Karl_Pech

Hallo misterET,


>  int i;
>  char c;
>  
> c = 0b00110011;
>  i = c;
>  
> Ist dann i = 110011?
> Es geht mir hier nur um die Bitkonfiguration.
> Oder ist es verboten, da unterschiedliche Datentypen?
>  Muss man vllt schreiben i = (int)c ?


Ich denke, das ist vom Compiler abhängig. Zumindest mit folgendem Compiler unter Cygwin:

gcc (GCC) 4.3.4 20090804 (release) 1

wurde der obige Code ohne Typenkonvertierung übersetzt. Ansonsten konvertiere einfach wie du es oben erwähnt hast. Der Code an sich funktioniert so, wie du es beschrieben hast. Am Ende ist i == 51.



Viele Grüße
Karl




Bezug
                
Bezug
int i = char c? geht das?: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:55 Do 03.06.2010
Autor: felixf

Hallo,

> >  int i;

>  >  char c;
>  >  
> > c = 0b00110011;
>  >  i = c;
>  >  
> > Ist dann i = 110011?
> > Es geht mir hier nur um die Bitkonfiguration.
> > Oder ist es verboten, da unterschiedliche Datentypen?
>  >  Muss man vllt schreiben i = (int)c ?
>
>
> Ich denke, das ist vom Compiler abhängig.

es haengt von der Maschine ab; wenn der Wertebereich eines chars eine Teilmenge des Wertebereichs eines ints ist, dann geht es, ansonsten kann man einen char nur implizit zu einem unsigned int konvertieren.

Das ist aber auf so gut wie allen Maschinen, die man benutzt, der Fall.

LG Felix


Bezug
        
Bezug
int i = char c? geht das?: Antwort
Status: (Antwort) fertig Status 
Datum: 20:54 Sa 05.06.2010
Autor: Event_Horizon

Hallo!

Wie gesagt, prinzipiell geht das. Das Problem ist aber ein anderes.

Es ist normalerweise möglich, einer Variablen mit größerem Definitionsbereich den Wert einer Variablen mit kleinerem bereich zuzuweisen.

Das Char (1 Byte) paßt in das Short (2 byte), dieses wiederum in das Int (4 Byte), das in das Long(8 Byte)...

Da das Char eigentlich gundsätzlich 1 Byte groß ist und das INT eigentlich auch immer größer ist, kein Problem.

AAABER:

Das char kann Vorzeichenbehaftet sein. Statt von 0 bis 255 gehts dann von -128 bis +127!
Und das führt zu Problemen:

char c=0b11101110;   //Dezimal: -18

int i=c;  //Dezimal immernoch -18, binär aber plötzlich 11111111111111111111111111101110

Daher rate ich, grundsätzlich die UNSIGNED version zu benutzen, wenn man mit Bits hantieren will.


Ich weiß grade nicht, was der gcc zu negativen CHARs sagt. Aber ich schreibe auch für den C18, ein Kompiler für kleine 8Bit-Microprozessoren von Microchip, und bei dem sind chars erstmal mit Vorzeichen. Man kann dem Compiler zwar nen Flag mitgeben, daß CHARs immer positiv sind, aber sicher ist sicher.

Bezug
                
Bezug
int i = char c? geht das?: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:24 Sa 05.06.2010
Autor: felixf

Hallo,

> Das Char (1 Byte) paßt in das Short (2 byte), dieses
> wiederum in das Int (4 Byte), das in das Long(8 Byte)...

diese Angaben sind sehr relativ, sie haegen vom Compiler und Zielsystem ab. Gerade auf 64-Bit-Systemen, die heute auch sehr verbreitet sind, ist ein int ebenfalls 64 bit breit. (Wenn man nicht 2-Bit-Programme entwickelt.) Und ein long ist bei 32-Bit-Systemen meist 32 bit breit und nicht 64 bit; dafuer muss man meist long long nehmen (und das ist dann C 99 und (noch) kein C++).

> Daher rate ich, grundsätzlich die UNSIGNED version zu
> benutzen, wenn man mit Bits hantieren will.

Oder halt signed, je nachdem welchen Effekt man genau haben will ;-)

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorwissen.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]