www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Bitmap ausgeben
Bitmap ausgeben < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Bitmap ausgeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:56 Sa 04.06.2011
Autor: steftn

Aufgabe
#include <stdio.h>
#include <stdlib.h>

int main()



{
int i;
  for(i=0; i<16; i++)
  { if(4711 & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }


    return 0;
}

Hallo,

also ich habe oben genanntes Programm vorgegeben.

Aber irgendwie verstehe ich nicht, was das Programm genau macht!

Mir ist z.b. völlig unklar, wie dieser Ablauf funktioniert:

{ if(4711 & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }

Da wird doch zuerst 0x8000 um i nach rechts verschoben und dann mit 4711 UND-Verknüpft. Aber da steht doch ein if davor, also "WENN". Aber was soll das für einen Sinn ergeben??

"WENN 0x8000 um i nach rechts verschoben und dann mit 4711 UND-Verknüpft, dann 1 sonst 0" , hääää????

Nach WENN muss doch normalerweise irgend eine Bedingung kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist das irgendwie nicht ersichtlich.

Ich versteh das nicht, das Programm funktioniert zwar, aber ich hab keine Ahnung wie.
Kann mir das vielleicht jemand erklären?

Ich hoffe ihr habt verstanden was ich nicht verstehe.
Wär super wenn mir das jemand erklären könnte.
gruß


        
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 12:03 Sa 04.06.2011
Autor: nsche

hallo steftn
>     if(4711 & (0x8000>>i))
> Da wird doch zuerst 0x8000 um i nach rechts verschoben und
> dann mit 4711 UND-Verknüpft. Aber da steht doch ein if
> davor, also "WENN". Aber was soll das für einen Sinn
> ergeben??

if prüft (intern) ob der Ausdruck in der Klammer richtig (true) ist oder falsch (false). Der Ausdruck gilt als false, wenn 0 herauskommt, anderenfalls gilt er als true.

> "WENN 0x8000 um i nach rechts verschoben und dann mit 4711
> UND-Verknüpft, dann 1 sonst 0" , hääää????

Passt schon: wenn das Ergebnis der UND-Verknüpfung 1 ergibt, wird eine 1 ausgegeben, anderenfalls eine 0.

> Nach WENN muss doch normalerweise irgend eine Bedingung
> kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist
> das irgendwie nicht ersichtlich.

Anstelle von:

>     if(4711 & (0x8000>>i))

hätte man auch
if(4711 & (0x8000>>i)==1)
schreiben können. Die Vergleichsoperation wird oft weggelassen. So steht:
if (i){...}
oft an Stelle von:
if (i!=0){...}

Eine ähnliche Geschichte:
for(i=10;i;i--{...}
an Stelle von:
for (i=10;i>0;i--{...}

viele Grüße
nsche



Bezug
                
Bezug
Bitmap ausgeben: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:24 So 05.06.2011
Autor: steftn

Hallo,

danke für deine Antwort, was ich aber nicht ganz verstehe:
als Lösung wird für die Bitmap dann

0001001100111 ausgegeben. Ich verstehe aber nicht wiso!

Weil zuerst wird doch 0x8000 um 0 nach rechts verschoben. Dann wird das mit 4711 UND-Verknüpft. Ergebnis: 0

(also praktisch so:

    100011100010001
&  1000000000000000
-------------------
   0000000000000000

dann ist hier doch das Ergebnis 0)




Als zweites wird dann 0x8000 um 1 nach rechts verschoben und dann mit 4711 UND-Verknüpft: Ergebnis 1

(sieht dann so aus:

    100011100010001
&  0100000000000000
-------------------
   0100000000000000

ist das Ergebnis dann 1, weil ja bei der &-Verknüpfung mindestens einmal 1 rauskommt?)




Als drittes wird dann 0x8000 um 2 nach rechts verschoben und dann mit 4711 UND-Verknüpft: Ergebnis: 0

(sieht dann so aus:

  100011100010001
&  10000000000000
-----------------
  000000000000000
hier kommt wieder 0 raus)



usw bis man 0x8000 halt dann schließlich um 15 nach rechts verschoben hat.

Dann würde bei mir aber sowas rauskommen:

0100011100010001

Was mache ich nur falsch?

Wär für jede Hilfe sehr dankbar!
gruß

Bezug
                        
Bezug
Bitmap ausgeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:55 So 05.06.2011
Autor: steftn

Hallo,

ich hab den Fehler gefunden.
Ich Depp dachte die 4711 wär eine hexadezimalzahl...
Ist ja eine Dualzahl...

sorry

danke aber trotzdem!

Bezug
                        
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 15:29 So 05.06.2011
Autor: felixf

Moin!

> danke für deine Antwort, was ich aber nicht ganz
> verstehe:
>  als Lösung wird für die Bitmap dann
>  
> 0001001100111 ausgegeben. Ich verstehe aber nicht wiso!

Also die Binaerdarstellung von 4711 ist 1001001100111.

> Weil zuerst wird doch 0x8000 um 0 nach rechts verschoben.
> Dann wird das mit 4711 UND-Verknüpft. Ergebnis: 0
>  
> (also praktisch so:
>  
> 100011100010001
>  &  1000000000000000
>  -------------------
>     0000000000000000
>  
> dann ist hier doch das Ergebnis 0)

Genau.

> Als zweites wird dann 0x8000 um 1 nach rechts verschoben
> und dann mit 4711 UND-Verknüpft: Ergebnis 1
>  
> (sieht dann so aus:
>  
> 100011100010001
>  &  0100000000000000
>  -------------------
>     0100000000000000
>  
> ist das Ergebnis dann 1, weil ja bei der &-Verknüpfung
> mindestens einmal 1 rauskommt?)

Nein, das Ergebnis ist schon 0100000000000000. Das ist jedoch ungleich 0, weswegen der then-Zweig der if-Abfrage ausgefuehrt wird.

> Als drittes wird dann 0x8000 um 2 nach rechts verschoben
> und dann mit 4711 UND-Verknüpft: Ergebnis: 0
> [...]

LG Felix


Bezug
                
Bezug
Bitmap ausgeben: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:26 So 05.06.2011
Autor: felixf

Moin!

> > "WENN 0x8000 um i nach rechts verschoben und dann mit 4711
> > UND-Verknüpft, dann 1 sonst 0" , hääää????
>  Passt schon: wenn das Ergebnis der UND-Verknüpfung 1
> ergibt, wird eine 1 ausgegeben, anderenfalls eine 0.

Nicht ganz: wenn das Ergebnis der UND-Verknuepfung (hier steht ja die arithmetische/binaere und-Verknuepfung, nicht die logische) [mm] $\neq [/mm] 0$ ist, dann wird 1 ausgegeben, andernfalls 0.

> > Nach WENN muss doch normalerweise irgend eine Bedingung
> > kommen, z.b. WENN xzy=1 dann a=5 sonst b=7 ?? Aber hier ist
> > das irgendwie nicht ersichtlich.
>  Anstelle von:
>  >     if(4711 & (0x8000>>i))
>  hätte man auch
>  if(4711 & (0x8000>>i)==1)

Das waer dann if(4711 & (0x8000>>i)!=0).

LG Felix


Bezug
        
Bezug
Bitmap ausgeben: Unterprogramm void aufrufen
Status: (Frage) beantwortet Status 
Datum: 13:18 Mo 06.06.2011
Autor: steftn

Aufgabe
Für die Ausgabe einer Bitmap steht das Unterprogramm PrintBitLine zu Verfügung:

void    PrintBitLine(unsigned short us)
{ int i;
  for(i=0; i<16; i++)
  { if(us & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }
}


Erstellen Sie ein Programm und kopieren Sie PrintBitLine vor das main-Unterprogramm. Rufen Sie PrintBitLine zehn mal auf mit den Werten [mm] 1,2,....2^i, [/mm] ....2^10 .

Hallo,

ich habe ein weiteres Problem. Wie kann ich einen Unterprogramm, also "void"-Programm aufrufen?

Mein selbsterstelltes Programm sieht bis jetzt so aus:


#include <stdio.h>
#include <stdlib.h>



void    PrintBitLine(unsigned short us)
{ int i;
  for(i=0; i<16; i++)
  { if(us & (0x8000>>i))
      printf("1");
    else
      printf("0");
  }
}
int main()
{

unsigned short us0 =1,   us1 =2,   us2 =4,    us3 =8;
unsigned short us4 =16,  us5 =32,  us6 =64,   us7 =128;
unsigned short us8 =256, us9 =512, us10=1024;

printf ("%d", PrintBitLine (unsigned short us0));
printf ("%d", PrintBitLine (unsigned short us1));

// usw. bis (unsigned short us10)
    return 0;
}


Aber leider funktioniert das Programm so nicht.
Weiß jemand, wie ich das PrintBitLine als Unterprogramm mit den jeweiligen us0...us10-Werten aufrufen kann?

Wär super wenn ihr mir helfen könntet! Danke

Bezug
                
Bezug
Bitmap ausgeben: Antwort
Status: (Antwort) fertig Status 
Datum: 13:32 Mo 06.06.2011
Autor: MathePower

Hallo steftn,

> Für die Ausgabe einer Bitmap steht das Unterprogramm
> PrintBitLine zu Verfügung:
>  
> void    PrintBitLine(unsigned short us)
>  { int i;
>    for(i=0; i<16; i++)
>    { if(us & (0x8000>>i))
>        printf("1");
>      else
>        printf("0");
>    }
>   }
>  
>
> Erstellen Sie ein Programm und kopieren Sie PrintBitLine
> vor das main-Unterprogramm. Rufen Sie PrintBitLine zehn mal
> auf mit den Werten [mm]1,2,....2^i,[/mm] ....2^10 .
>  Hallo,
>  
> ich habe ein weiteres Problem. Wie kann ich einen
> Unterprogramm, also "void"-Programm aufrufen?
>  
> Mein selbsterstelltes Programm sieht bis jetzt so aus:
>  
>
> #include <stdio.h>
>  #include <stdlib.h>
>  
>
>
> void    PrintBitLine(unsigned short us)
>  { int i;
>    for(i=0; i<16; i++)
>    { if(us & (0x8000>>i))
>        printf("1");
>      else
>        printf("0");
>    }
>   }
>  int main()
>  {
>  
> unsigned short us0 =1,   us1 =2,   us2 =4,    us3 =8;
>  unsigned short us4 =16,  us5 =32,  us6 =64,   us7 =128;
>  unsigned short us8 =256, us9 =512, us10=1024;
>  
> printf ("%d", PrintBitLine (unsigned short us0));
>  printf ("%d", PrintBitLine (unsigned short us1));


Das UnterProgramm PrintBitLine hat den Rückgabetyp void,
gibt demnach nichts zurück. Die Ausgabe dieses Unterprogramms
geschieht in dem selbigen, so daß hier folgender Aufruf in der
main-Funktion erfolgen muss:

PrintBitLine(us0);


>  
> // usw. bis (unsigned short us10)
>      return 0;
>  }
>  
>
> Aber leider funktioniert das Programm so nicht.
>  Weiß jemand, wie ich das PrintBitLine als Unterprogramm
> mit den jeweiligen us0...us10-Werten aufrufen kann?
>  
> Wär super wenn ihr mir helfen könntet! Danke


Gruss
MathePower

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


^ Seitenanfang ^
www.vorhilfe.de