C nuller und einser im Bitmuster zählen in C

_mclaren_

Lieutenant
Registriert
Dez. 2006
Beiträge
909
Schreiben Sie eine Funktion, die feststellt wie viele Einser und wieviele Nullen im Bit-
muster eines Integerwertes vorkommen und welche die Ergebnisse in zwei Interger-
variable des Aufrufers schreibt, die der Funktion per Reference ubergeben werden.
Testen Sie Ihre Funktion in einem geeigneten Hauptprogramm.

Also vom Prinzip hab ich das Programm, aber warum verändert sich mein Zähler nicht?1 Ich verstehs nicht - Fehler beim Pointer?

Danke für jeden Tipp!

Zur ERklärung:

Ich habe irgendein Bitmuster hier nun 0xFFFF . Das übergeb ich an die Funktion.
Dort verunde ich das Bitmuster mit 1, damit ich die letze Stelle weiß, wenn die eins ist, soll er in dem entsprechenden if Zweig den Zähler erhöhen - das gleiche für Null.

Code:
#include <stdio.h>

#include <stdlib.h>



int main()

{
    unsigned int bitmuster = 0xFFFF;

    int einser=0;
    int nuller=0;
    zaehler(bitmuster, &einser, &nuller);
    printf("%d 1er und %d 0er\n",einser,nuller);


    return 0;

}

// Funktionsbeschreibung
/*  Die Funktion erhält ein Bitmuster und gibt per Pointer zurück wie
    viele Einser und Nuller dieses Bitmuster enthalten hat.
    bitmuster: Bitmuster
    *einser: Adresse der Variable einser
    *nuller: Adresse der Variable nuller
*/


void zaehler(int bitmuster,int *eins,int *null){
  int einerstelle;
  int i;

  for(i=(sizeof(int)*8);i>=1;i--){
    einerstelle = bitmuster & 1;
    if(einerstelle){
      *(eins++);
    }else *(null++);
    bitmuster = bitmuster >> 1;
  }
}
 
Zuletzt bearbeitet:
überleg mal was er macht: es wird der zeiger um 1 erhöht, danach wird dereferenziert und zum schluss wird nichts gemacht? den zeiger ändern willst du ja nicht, sondern du willst den wert erhöhen.

dereferenziere also zuerst und erhöhe danach. ;)
 
DANKE!
tjaja - so dumme fehler *g*
 
Zuletzt bearbeitet:
Zurück
Oben