tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von deepthroat
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
471
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    hallo,

    ich lege zwei 14bit große zeichenketten an welche mit einsen gefüllt werden. nValue ist der wert der zweierpotenz - 1. so erhalte ich in binärdarstellung nach meinem algorithmus in der while-schleife weiterhin lauter einsen in der zeichenkette. wenn keine zweierpotenz vorliegt entstehen in der binärdarstellung nullen. in der if-abfrage prüfe ich ob der comp und der bits gleich sind (= zweierpotenz). für gleichheit sollte laut msdn 0 zurück geliefert werden. trotz gleicher strings läuft mein programm dennoch in die if-abfrage.
    beim debuggen standen im speicher sowohl in comp als auch in bits nur einsen drin. ich verstehe da den zusammenhang nicht mehr.

    kann mir jemand weiterhelfen oder benötige ich eine zusätzliche bibliothek?

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    void CDisplayControl::OnSpectrum() 
    {   
        int nValue = ((CWiwoDlg*)GetParent())->GlPar.nNperB-1;
     
        char bits[14];
        char comp[14];
        int i;
     
        for(i=0; i < 14; i++)
        {
            bits[i] = '1';
            comp[i] = '1';
        }
        
        i = 0;  
        while(nValue != 0)
        {
            bits[14-i] = '0' + nValue%2;
            nValue = nValue/2;
            i++;
        }
     
        // NSamples must be a potenz of 2, from 2^7 until 2^e14!
        if(strcmp(comp, bits) != 0)
        {
            CString msg = "N Samples muss 2er Potenz sein!\nGültigkeitsbereich von +2e7 bis +2e14.";
            MessageBoxEx(((CWiwoDlg*)GetParent())->GetSafeHwnd(), msg, "Hinweis", MB_ICONWARNING, LANG_GERMAN);
            m_ctrlSpectrum.SetCheck(0);
            return;
        }
    }
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    strcmp funktioniert nur richtig mit Zeichenketten, die nullterminiert sind.

    Sehe ich das richtig, dass du nur überprüfen willst, ob es sich beim eingegebenen Wert um eine Zweierpotenz handelt?
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    hallo matthias,

    ja das ist richtig, ich möchte nur vergleichen ob es sich bei der eingegebenen zahl um eine zweierpotenz handelt und im fehlerfall eine meldung ausgeben.

    gruß cappaja
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Bitte halte dich an die Netiquette, insbesondere Punkt 15 Groß-/Kleinschreibung. Danke!

    Bei einem Integer handelt es sich genau dann um eine Zweierpotenz, wenn genau 1 Bit gesetzt ist (abgesehen vom Vorzeichenbit natürlich).

    \edit: Es geht zwar auch besser, aber du könntest es z.B. in einer Schleife machen:
    Code cpp:
    1
    2
    3
    4
    
    for (int i = 1 << 6; i < (1 << 14); i <<= 1) {
      if (value == i) 
         /* Zweierpotenz */
    }
    Gruß
    Geändert von deepthroat (20.08.09 um 12:21 Uhr)
    Cappaja bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    wenn der zu prüfende Wert > 0 ist, geht es so am einfachsten:
    Code cpp:
    1
    2
    3
    
    if ((value & (value - 1)) == 0) {
      // Zweierpotenz
    }

    Grüße, Matthias
    Cappaja bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    Cappaja Cappaja ist offline Mitglied Silber
    Registriert seit
    May 2009
    Ort
    Konstanz
    Beiträge
    85
    danke für eure Antworten, habe das Problem jetzt gelöst.

    mfg Cappaja
     

Ähnliche Themen

  1. [C Suche:] strcmp + wildcard
    Von Unicate im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 11.04.09, 11:38
  2. strcmp mit sortierfunktion Denkfehler
    Von umx3511 im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 07.11.07, 18:55
  3. Strings vergleichen mit strcmp
    Von Blondie05 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 06.04.05, 16:08
  4. Eigener FTP Server - 502 command FEHLER - local = ok, ip = fehler
    Von robertino im Forum Hosting & Webserver
    Antworten: 26
    Letzter Beitrag: 30.04.04, 12:13
  5. Antworten: 5
    Letzter Beitrag: 06.05.02, 11:54