Jha én a határokat a scriptbõl néztem nem az volt a lényeg.
|| és a && operátorok között nincs sebességbeli különbség.
Ezzel kicsit vitatkoznék, igaz lehet hogy köztük nincs sebességbeli különbség de ha egy konkrét példán vizsgáljuk meg mûködésüket, már más eredményt kapunk.
|| logikai vagy operator használatakor ha az egyik feltétel igaz akkor igaz (true) értéket kapunk
&& logikai és operator használatakor ha mind a kettõ feltétel igaz csak abban ez esetben kapunk igaz(true) értéket
Megpróbálok egy ugyanolyan feltétel vizsgálatot írni hogy igaz legyen mindkét állítás logikai és, logikai vagy operatorral nehogy visszatérési érték különbözõsége miatt legyen a sebesség különbség.
Íme a két vizsgálandó feltétel, t = 1-el.
if(t > 0 || t > 0) test++; // logikai vagy
if(t > 0 && t > 0) test++; // logikai és
És a teszt:
new
t = 1, // ki kellett ide tennem változóba mert reklamált a pawn fordító ha így próbáltam if(1 > 0 || 1 > 0) test++;
starttime = GetTickCount(),
test;
for(new i; i < 1000000; i++)
{
if(t > 0 || t > 0) test++;
}
printf(\"Logikai vagy || operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 && t > 0) test++;
}
printf(\"Logikai és && operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 || t > 0) test++;
}
printf(\"2 Logikai vagy || operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
starttime = GetTickCount();
test = 0;
for(new i; i < 1000000; i++)
{
if(t > 0 && t > 0) test++;
}
printf(\"2 Logikai és && operator test. time: %d, count: %d\", GetTickCount() - starttime, test);
Kétszer futtattam le a tesztet egymás után és az eredmény ez lett:
[20:39:35] Logikai vagy || operator test. time: 55, count: 1000000
[20:39:35] Logikai és && operator test. time: 179, count: 1000000
[20:39:35] 2 Logikai vagy || operator test. time: 60, count: 1000000
[20:39:35] 2 Logikai és && operator test. time: 144, count: 1000000
Igaz ez 1 millió ismétlõdés esetén mérhetõ,
de mibõl is adódik akkor ez a sebesség különbség?
A válasz egyszerû mint írtam az elején logikai || vagy feltétel vizsgálatkor ha az egyik feltétel igaz true értéket kapunk. Ismétlem, elég ha az egyik igaz, true a visszatérési érték!
Persze a vizsgálatot direkt úgy írtam hogy már az elsõ vizsgálat igaz legyen,
if(1 > 0 || 1 > 0) test++; // logikai vagy
[/quote]
ebbõl az következik hogy || logikai vagy operator használatkor ha a legelsõ feltétel vizsgálat igaz
(mivel 1 nagyobb 0 nál) a másodikat már nem vizsgálja meg.
Van másik szembetûnõbb vizsgálat erre a célra, megírom azt is, amint lesz egy kis idõm.
//¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Íme meg is írtam.
// Elsõ feltétel hamis a második már igaz.
// És lehet próbálgatni > < váltogatással.
if(1 < printf(\"Elsõ feltétel..\") || 1 > printf(\"Második feltétel..\") || 1 > printf(\"Harmadik feltétel..\") || 1 > printf(\"Negyedik feltétel..\"))
{
printf(\"Íme ez lenne a logikai vagy || láthatóbb vizsgálata\");
}