Kom på det (tal Mod 2 = 0) JAg förstår inte varför man använder modelus? Det stämmer. Men ofta handlar det om att man vill ha "varannan", och då är det naturligare att köra med modulo, eftersom det inte funkar att använda "bitvis och" ifall man vill byta till "var tredje". ...och har man flyttal så fungerar mod-varianten men inte bitvis-varianten om man bara ser till att flyttalen är korrekt inskrivna. Jag bör tilläga att jag inte gillar VB's AND operator. Därför att det är operator för både bitvis och booleansk. Man bör dock se upp med modulo eftersom det fungerar olika med negativa tal. Jag kan håller med om att Macro missbrukats till mycket. man känner igen sig i det du säger Andreas! ( skäms skäms )Ta reda på ett udda tal
Finns det något inbyggt som kan lämna true eller false om ett tal är udda?Sv: Ta reda på ett udda tal
<code>
if foo Mod 2 = 0 then
return True
else
return False
end if
</code>Sv: Ta reda på ett udda tal
ex, dr du ger tal ett vrde:
If (tal Mod 2 = 0) Then
MessageBox.Show("jmt")
End If
som du redan kommit fram till! :)Sv:Ta reda på ett udda tal
(foo % 2 == 0 ? true : false);
kan kort och gott skrivas
(foo % 2 == 0)
if foo Mod 2 = 0 then
return True
else
return False
end if
kan kort och gott skrivas
return (foo Mod 2 = 0)
Brukar ni även skriva
if (((var == 0) == true) == false)
i stället för
if (var != 0)
?
Sv: Ta reda på ett udda tal
Bitvis and borde väl vara tillräckligt.
För heltal är det den mist signifikanta biten som avgör om talet är jämt eller ojämnt.
Alltså bör en Bitvis and operation med ett ge ett(sant, värdet är skijt från noll) för ojämna tal och noll(falskt) för jämna tal:
Dim x As Integer = 0, y As Integer = 1
If x And 1 Then
console.Write("X is Odd")
Else
Console.Write("X is Even")
End If
If y And 1 Then
Console.Write("Y is Odd")
Else
Console.Write("Y is Even")
End If
Det kan ur läsbar hets syfte underlätta att kapsa det i en funktion. Men det ger ju en liten prestanda overhead. Ett Makro vor bättre. Stödjer vb.net, c# makro?
Sub Main()
Dim x As Integer = 0, y As Integer = 1
If Odd(x) Then
Console.Write("X is Odd")
Else
Console.Write("X is Even")
End If
If Even(y) Then
Console.Write("Y is Even")
Else
Console.Write("Y is Odd")
End If
Console.Read()
End Sub
Function Odd(ByVal value As Integer) As Boolean
Return value And 1
End Function
Function Even(ByVal value As Integer) As Boolean
Return Not value And 1
End Function
Sv:Ta reda på ett udda tal
Sedan är nog fler vana vid att tolka "mod 2" som "jämn eller udda", och har därför lättare att läsa ett program med "mod 2" än med "bitvis and 1". Läsbarhet är också viktigt.Sv: Ta reda på ett udda tal
...och i språk där variabler kan ha olika typer beroende på vad man lägger i dem är det ofta så att den bitvisa varianten inte funkar.
...och i en hel del språk (framför allt matematiska) finns inte bitvisa funktioner i någon lättillgänglig form.Sv:Ta reda på ett udda tal
Vilket beror på data typerna hos värdena. Sv: Ta reda på ett udda tal
"-1 mod 2" kan returnera -1 eller 1 beroende på programspråk och ibland även bereoende på kompilator eller processor.
Jämför därför alltid resultatet med 0 (vilket alla exempel ovan gör iofs)
>Det kan ur läsbar hets syfte underlätta att kapsa det i en funktion. Men det ger ju en liten prestanda
>overhead. Ett Makro vor bättre. Stödjer vb.net, c# makro?
Välkommen till 21a århundradet. Här är makro aldrig bättre eller snabbare än en funktion i kompilerade programspråk.
(Makron är bra till många saker men inte som ersättare för en funktion)
vb.net och C# från Microsoft stöder inte makro, C++/CLI gör det. Vet inte hur det är med andra .net kompilatorer.Sv:Ta reda på ett udda tal
JAg antar att du syftar på att kompilatorn förmodligen optimerar koden till in-line. Med andra ord den ser att funktionen är så enkel så att när den kompilerar ersäter den funktionsanropet med kroppen från funktionen.
Eftersom den då slipper läggar parameter på stacken och frigöra dem efter.
Fast nu är det jag som spekulerar.
Jag prioritera läsbarhet för prestanda. Alltså att man använder en funktion.
Men om du skriver en codec eller något där uttrycket görs ofta. Så kan det var att tänka på.
Jag är svag för optimering. ;)
Vilket ibland visar sig vara kontraproduktivt.
Så jag får väl krypa till korset här. Borde inte tagit upp det som optimering.
<info>"More computing sins are committed in the name of efficiency (without necessarily achieving it)
than for any other single reason - including blind stupidity."
- W.A. Wulf
</info>
<info>"Premature optimization is the root of all evil."
- Donald Knuth
</info>
<info>"The First Rule of Program Optimization: Don't do it.
The Second Rule of Program Optimization (for experts only!): Don't do it yet."
- Michael A. Jackson
</info>
Alltså skriv läsbar kod. När ett uppenbart behov av optimering identifierats så kan man ta itu med det då och endast då.Sv: Ta reda på ett udda tal
Lite konstigt att frameworket inte har nåt IsEven, IsOdd i system.math.
Det hade väl varit smutt.