Gå til innhold

Anbefalte innlegg

Hallo igjen. Jeg holder på med et program som benytter seg av internetttilgang, og har i den annledning lånt en funksjon

som skal teste tilkoblingen (Koden jeg hentet den fra kan sees her:http://www.c-sharpcorner.com/UploadFile/sc...ctionState.aspx). I koden er følgende if statement :

  
long lngFlags;
if (System.Convert.ToBoolean(lngFlags) && System.Convert.ToBoolean(InetConnState.lan))
           {
               switch (ConnectionQualityString)
               {

                   case "Good": 
                       ConnectionQualityString = "Good";
                       break;
                   case "Intermittent": 
                       ConnectionQualityString = "Good";
                       break;
                   case "Off": 
                       ConnectionQualityString = "Intermittent";
                       break;
               }
               this.Refresh();
           }

           else if (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long)
                     InetConnState.modem)// &en i denne else if statementet er det jeg lurer på
           {
               switch (ConnectionQualityString)

               {
                   case "Good": 
                       ConnectionQualityString = "Good";
                       break;
                   case "Intermittent": 
                       ConnectionQualityString = "Good";
                       break;
                   case "Off": 
                       ConnectionQualityString = "Intermittent";
                       break;
               }
           }
......flere else if ........

Det jeg da lurer på er hva "&" gjør i else if statementet? Har sett det brukt noen ganger før men har ikke helt funnet ut hva det gjør. Og en annen ting, koden min vil ikke kompilere når jeg bruker koden, men gir en feilmelding på akkurat denne linjen(Cannot implicitly convert from type 'long' to 'bool'), regner med at dette er pga Sytem.Convert.ToBoolean(lngFlags) men ser ikke helt hvorfor dette ikke går. Jeg har prøvd å bruke bool.Parse(lngFlags.ToString()) som gir samme resultat.

Endret av Velena
Lenke til kommentar
Videoannonse
Annonse

Er fortsatt ustødig på noen av termene i C#, og visste ikke at & blir kalt en operator. Jeg visste derimot at det er håpløst å søke etter bare "&" og regne med å få relevante resultat, derfor spurte jeg her.

Edit: Forresten, hva er nytten til & hvis && er mer effektiv, og resultatet blir det samme?

Endret av Velena
Lenke til kommentar

Takk for linken, den besvarte spørsmålet.

Edit:

It is important to understand that there can be drawbacks to not evaluating the second operand. If, for example, an increment operator (++) is used in the second operand, not evaluating this would mean that a variable's value would not be adjusted. Inappropriate use such as this can lead to bugs that are difficult to identify and resolve.
Ville det ikke være like greit å utføre addisjonen før &&, istedet for å bruke &? Endret av Velena
Lenke til kommentar
  • 2 uker senere...

Den lenken bommer litt på poenget. & er en såkalt bitwise operator og kan brukes på mer enn bare bool typer, den kan også brukes på heltall. Dvs at hvis du har

int i = 6; // 0110 i binært
int j = 11; // 1011 i binært
int k = i & j; // k = 2, dvs 0010 i binært

Så tar den 0110 (6) og OG-er (&) hver bit med tilsvarende bit i 1011 (11) og får 0010 (2) til svar fordi det var bare i den nest siste posisjonen det var en 1 i begge tallene (med OG må du ha 1 i begge for å få 1).

 

Bitwise operatorer brukes til en del binær regning samt til såkalte flagg. Stort sett en levning fra C++ tiden og er fullstendig ubrukelig, og som regel uforståelig, hvis du ikke forstår binære tall først.

 

&& derimot er en operator som er spesialbygget for å ta seg av kun bool verdier*, dvs som er enten true eller false. Det er også det som gjør at den kan kortslutte et uttrykk.

* I C# i hvert fall, i C# sin bestefar, C++, kunne && også brukes med andre typer og fant først ut om utrykket på den ene siden var 0 (dvs false) eller noe annet enn 0 (dvs true), så den andre siden og så beregnet resultatet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...