2Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
471
471
EMPFEHLEN
-
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; } }
-
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
-
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
-
20.08.09 11:52 #4
- 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:
GrußCode cpp:1 2 3 4
for (int i = 1 << 6; i < (1 << 14); i <<= 1) { if (value == i) /* Zweierpotenz */ }
Geändert von deepthroat (20.08.09 um 12:21 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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„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
-
danke für eure Antworten, habe das Problem jetzt gelöst.
mfg Cappaja
Ähnliche Themen
-
[C Suche:] strcmp + wildcard
Von Unicate im Forum C/C++Antworten: 2Letzter Beitrag: 11.04.09, 11:38 -
strcmp mit sortierfunktion Denkfehler
Von umx3511 im Forum C/C++Antworten: 7Letzter Beitrag: 07.11.07, 18:55 -
Strings vergleichen mit strcmp
Von Blondie05 im Forum C/C++Antworten: 1Letzter Beitrag: 06.04.05, 16:08 -
Eigener FTP Server - 502 command FEHLER - local = ok, ip = fehler
Von robertino im Forum Hosting & WebserverAntworten: 26Letzter Beitrag: 30.04.04, 12:13 -
*argh* fehler im GB-installscript find aber den fehler nicht
Von Wolf of Doom im Forum PHPAntworten: 5Letzter Beitrag: 06.05.02, 11:54





Zitieren
Login






