matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

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
StartseiteMatheForenC/C++int i = char c? geht das?
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
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.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]