Forum: PC-Programmierung if-Anweisung


von Da Mo (Gast)


Lesenswert?

Guten Tag,

wie darf ich folgende if-Anweisung verstehen (siehe Fragezeichen)?

1
// Aufgabenstellung 4
2
// pos.c
3
4
#include<stdio.h>
5
6
unsigned char pos(unsigned char);
7
8
int main(void)
9
{
10
 int position;
11
    
12
 position = pos(0x64);
13
 
14
 printf("position: %d\n\n", position);
15
   
16
 system("pause");
17
 return 0;
18
}
19
20
21
unsigned char pos(unsigned char data)
22
{
23
 int i;
24
 int flag = 0;
25
26
 for(i= 0; i< 8; i++)
27
 {
28
  if(data & (1 << i))
29
  {
30
   if(flag) //??????????????????????????????????????
31
   {
32
    return i - 1;
33
   }
34
   flag = 1;
35
  }
36
  else 
37
  {
38
   flag = 0;
39
  }  
40
 }
41
42
 return 0;
43
}


Vielen DANK!!!

von Tom (Gast)


Lesenswert?

if(flag) ist das gleiche wie if(flag == 1).

von Sven P. (Gast)


Lesenswert?

Tom schrieb:
> if(flag) ist das gleiche wie if(flag == 1).
Vorsicht :-)
1
if (flag)
ist das Gleiche wie
1
if (flag != 0)

von Da Mo (Gast)


Lesenswert?

Immer diese Kurzschreibweisen :-)

DANKE!!!

von Krapao (Gast)


Lesenswert?

Das Programm ist Mist. Es gibt mehrdeutige Ergebnisse aus. Z.B. für 0x00 
das gleiche wie für 0x03. return i statt return 0 könnte die Situation 
eindeutiger machen.

von Da Mo (Gast)


Lesenswert?

Die Aufgabenstellung lautet:

Gesucht ist eine Funktion, welche die Position der ersten zwei Einsen 
eines 8-Bit-Wertes zurückliefert.

Du hast Recht, die HEX-Zahl 0x00 wird mit diesem Programm nicht richtig 
interpretiert. Man könnte zum Beispiel einen Fehler-Code als return-Wert 
zurück senden, wenn keine Einsen gesetzt sind (z.B.: 0x00).

von Krapao (Gast)


Lesenswert?

Fehlercode 0 kannst du nehmen, wenn du überlegst, welche Werte für die 
beiden aufeinanderfolgenden Einsen sinnvoll sind. i-1 als Beginn der 
Zweierfolge ist da ungeschickt gewählt. Das Ende der Zweierfolge passt 
da besser!

von Rolf M. (rmagnus)


Lesenswert?

Da der maimal mögliche nicht-Fehler-Wert aber bei 6 liegt, hat man 
oberhalb davon noch jede Menge Platz für den Fehlercode. Da tut's dann 
auch ein:
1
#define NICHT_ENTHALTEN 0xff

von Ingo L. (Gast)


Lesenswert?

Hi,

>Dominik M. schrieb:
1
int flag = 0;

Ich würde das kleine Wörtchen
1
static
 noch davor setzen.



Ingo

von Ich (Gast)


Lesenswert?

Ingo L. schrieb:
>int flag = 0;
>
> Ich würde das kleine Wörtchenstatic  noch davor setzen.

Ich würde das lieber sein lassen. Sonst funktioniert der Code nicht 
mehr.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.