Bir for döngüsünde <veya <= kullanılmalı mı [kapalı]


124

Bir döngü boyunca 7 kez yinelemeniz gerekse, şunu kullanır mıydınız:

for (int i = 0; i < 7; i++)

veya:

for (int i = 0; i <= 6; i++)

Dikkate alınması gereken iki nokta vardır:

  • verim
  • okunabilirliği

Performans için Java veya C # varsayıyorum. "Küçüktür" veya "küçüktür veya eşittir" kullanılması fark eder mi? Farklı bir dil hakkında fikriniz varsa lütfen hangisi olduğunu belirtin.

Okunabilirlik için 0 tabanlı dizileri varsayıyorum.

UPD: 0 tabanlı dizilerden bahsetmem bazı şeyleri karıştırmış olabilir. Dizi öğeleri aracılığıyla yinelemekten bahsetmiyorum. Sadece genel bir döngü.

Aşağıda, bu sihirli sayının ne olduğunu açıklayacak bir sabit kullanmakla ilgili iyi bir nokta var. Yani int NUMBER_OF_THINGS = 7" i <= NUMBER_OF_THINGS - 1" olsaydı "o zaman" tuhaf görünürdü, değil mi?


Şöyle derdim: dizinin tamamında çalışıyorsanız, sol tarafa hiçbir sayı çıkarmayın veya eklemeyin.
Letterman

Yanıtlar:


287

İlki daha deyimsel . Özellikle, (0 temelli anlamda) yineleme sayısını gösterir. 1 tabanlı bir şey kullanırken (örneğin JDBC, IIRC) <= kullanmak isteyebilirim. Yani:

for (int i=0; i < count; i++) // For 0-based APIs

for (int i=1; i <= count; i++) // For 1-based APIs

Gerçek dünya kodunda performans farkının önemsiz derecede küçük olmasını beklerdim.


30
Performans farkı olmayacağı neredeyse garantidir. X86 gibi birçok mimaride "son karşılaştırmada daha az veya eşittir" komutları vardır. Bir performans farkı görmenizin en olası yolu, kötü uygulanmış bir tür yorumlanmış dilde olacaktır.
takoz

3
Bunun yerine! = Kullanmayı düşünür müsünüz? En açık şekilde i'yi bir döngü sayacı olarak kurar ve başka hiçbir şey yapmaz.
yungchin

21
Genelde yapmam. Çok tanıdık gelmiyor. Ayrıca, döngü sırasında birisi yanlışlıkla i artarsa ​​çok, çok uzun bir döngüye girme riski vardır.
Jon Skeet

5
STL yineleyicilerle genel programlama! = Kullanımını zorunlu kılar. Bu (kazara çift artış) benim için sorun olmadı. Endekslerin <(veya> azalan) için daha açık ve geleneksel olduğuna katılıyorum.
Jonathan Graehl

2
Unutmayın, bir dizinin Uzunluğunu <kullanarak döngü yaparsanız, JIT dizi erişimini optimize eder (bağlı kontrolleri kaldırır). Yani <= kullanmaktan daha hızlı olmalıdır. Yine de kontrol etmedim
konfigüratör

72

Bu döngülerin her ikisi de 7 kez yinelenir. Diğeri için gerçekten iyi bir nedeniniz yoksa, içinde 7 olanın daha okunaklı / daha net olduğunu söyleyebilirim.


Java öğrenmeye ilk başladığım zamanı hatırlıyorum. 0 tabanlı dizin kavramından nefret ettim çünkü her zaman 1 tabanlı dizinler kullandım. Bu yüzden her zaman <= 6 varyantını kullanırdım (soruda gösterildiği gibi). Kendi zararıma, çünkü sonunda for döngüsünün gerçekten çıktığı zaman beni daha çok şaşırtacaktı. <
James Haug

55

Üniversitede 8086 Meclisi yaptığımız günlerden hatırlıyorum, yapmanın daha başarılı olduğunu:

for (int i = 6; i > -1; i--)

Bir JNS işlemi olduğu için, bu da İşaret yoksa Atla anlamına gelir. Bunu kullanmak, her döngüden sonra karşılaştırma değerini almak için bellek araması olmadığı ve karşılaştırma da yapılmadığı anlamına geliyordu. Bugünlerde çoğu derleyici, yazmaç kullanımını optimize eder, böylece bellek meselesi artık önemli değildir, ancak yine de gerekli olmayan bir karşılaştırma elde edersiniz.

Bu arada, döngünüze 7 veya 6 koymak bir " sihirli sayı " demektir. Daha iyi okunabilirlik için, Niyet Gösteren Adı olan bir sabit kullanmalısınız. Bunun gibi:

const int NUMBER_OF_CARS = 7;
for (int i = 0; i < NUMBER_OF_CARS; i++)

DÜZENLEME: İnsanlar montaj işini almıyor, bu yüzden daha kapsamlı bir örnek açıkça gerekli:

(İ = 0; i <= 10; i ++) için yaparsak, bunu yapmanız gerekir:

    mov esi, 0
loopStartLabel:
                ; Do some stuff
    inc esi
                ; Note cmp command on next line
    cmp esi, 10
    jle exitLoopLabel
    jmp loopStartLabel
exitLoopLabel:

(İnt i = 10; i> -1; i--) için yaparsak, bundan kurtulabilirsiniz:

    mov esi, 10
loopStartLabel:
                ; Do some stuff
    dec esi
                ; Note no cmp command on next line
    jns exitLoopLabel
    jmp loopStartLabel
exitLoopLabel:

Az önce kontrol ettim ve Microsoft'un C ++ derleyicisi bu optimizasyonu yapmıyor, ancak yaparsanız yapıyor:

for (int i = 10; i >= 0; i--) 

Öyleyse ahlaki, Microsoft C ++ † kullanıyorsanız ve artan veya azalan bir fark yaratmazsa, hızlı bir döngü elde etmek için kullanmanız gereken:

for (int i = 10; i >= 0; i--)

bunlardan biri yerine:

for (int i = 10; i > -1; i--)
for (int i = 0; i <= 10; i++)

Ancak açıkçası "for (int i = 0; i <= 10; i ++)" okunabilirliğini elde etmek normalde bir işlemci komutunu kaçırmaktan çok daha önemlidir.

† Diğer derleyiciler farklı şeyler yapabilir.


4
"Sihirli sayı" durumu, <= 'dan <kullanmanın neden daha iyi olduğunu güzel bir şekilde göstermektedir.
Rene Saarsoo

11
Başka bir sürüm "for (int i = 10; i--;)" dir. Bazı insanlar "for (int i = 10; i -> 0;)" kullanırlar ve -> araçlarının birleşimine gittiğini varsayarlar.
Zayenz

2
Montaj kodu için +1
nöro

1
ancak, döngü sayacını gerçekten kullanma zamanı geldiğinde, örneğin dizi indeksleme için, o zaman 7-igeriye doğru saymaktan elde ettiğiniz optimizasyonları batıracak olanı yapmanız gerekir .
Lie Ryan

@Lie, bu yalnızca öğeleri ileriye doğru sırayla işlemeniz gerektiğinde geçerlidir. Bu tür döngülerdeki çoğu işlemle, bunları döngüdeki öğelere istediğiniz sırayla uygulayabilirsiniz. Örneğin, bir değer arıyorsanız, listenin sonundan başlayıp listenin başında veya başında çalışıp çalışmanızın bir önemi yoktur (listenin hangi ucunda öğenizin olduğunu tahmin edemeyeceğinizi varsayarsak) olduğu gibi ve bellek önbelleği bir sorun değil).
Martin Brown

27

Okuması <= dizi.length-1'den daha kolay olduğundan her zaman <dizi.length kullanırım.

ayrıca <7'ye sahip ve bunun 0 dizini ile başladığını bildiğiniz göz önüne alındığında, sayının yineleme sayısı olduğu sezgisel olmalıdır.


Uzunluk işlevlerini bir döngüde kullanırken her zaman maliyetini kontrol etmeye dikkat etmelisiniz. Örneğin, C / C ++ 'da strlen kullanırsanız, karşılaştırmayı yapmak için gereken süreyi büyük ölçüde artıracaksınız. Bunun nedeni, strlen'in cevabını bulmak için tüm dizeyi yinelemesi gerektiğidir; bu, döngünüzün her yinelemesi için değil, muhtemelen yalnızca bir kez yapmak isteyeceğiniz bir şeydir.
Martin Brown

2
@Martin Brown: Java'da (ve inanıyorum ki C #), String.length ve Array.length sabittir çünkü String değişmezdir ve Array değişmez uzunluğa sahiptir. Ve String.length ve Array.length bir alan olduğundan (işlev çağrısı yerine), bunların O (1) olması gerektiğinden emin olabilirsiniz. C ++ durumunda, peki, neden en başta C-string kullanıyorsunuz?
Lie Ryan

18

Optimize edici bir bakış açısından bakıldığında önemli değil.

Kod stili bakış açısından bakıldığında <. Sebep:

for ( int i = 0; i < array.size(); i++ )

şundan çok daha okunaklı

for ( int i = 0; i <= array.size() -1; i++ )

ayrıca <size yineleme sayısını hemen verir.

<İçin başka bir oy, çok sayıda yanlışlıkla yapılan tek tek hataları önleyebileceğinizdir.


10

@Chris, .NET'te .Length'ün maliyetli olduğuna dair ifadeniz aslında doğru değil ve basit türler söz konusu olduğunda tam tersi.

int len = somearray.Length;
for(i = 0; i < len; i++)
{
  somearray[i].something();
}

aslında daha yavaştır

for(i = 0; i < somearray.Length; i++)
{
  somearray[i].something();
}

Daha sonra, çalışma zamanı tarafından optimize edilen bir durumdur. Çalışma zamanı, i dizisinin geçerli bir dizin olduğunu garanti edebildiğinden, sınır kontrolü yapılmaz. İlkinde, çalışma zamanı döngüden önce değiştirilmediğimi garanti edemez ve her dizin araması için dizide sınır kontrollerini zorlar.


Java'da .Length bazı durumlarda maliyetli olabilir. stackoverflow.com/questions/6093537/for-loop-optimization b'coz, .lenghtOR'yi çağırır .size. Emin değilim ama emin değilim ama sadece emin olmak istiyorum.
Ravi Parekh

6

Performans söz konusu olduğunda etkili bir fark yaratmaz. Bu nedenle, çözdüğünüz problem bağlamında anlaşılması daha kolay olanı kullanırdım.


5

Tercih ederim:

for (int i = 0; i < 7; i++)

Sanırım bu daha kolay bir şekilde "bir döngü boyunca 7 kez yineleme" anlamına geliyor.

Performans etkilerinden emin değilim - herhangi bir farkın derleneceğinden şüpheleniyorum.


4

Java 1.5'te şunları yapabilirsiniz:

for (int i: myArray) {
    ...
}

bu yüzden dizi durumu için endişelenmenize gerek yok.


4

Performans farkı olduğunu sanmıyorum. İkinci form kesinlikle daha okunaklı olsa da, son yineleme numarasını bulmak için zihinsel olarak bir tane çıkarmanız gerekmez.

DÜZENLEME: Başkalarının aynı fikirde olmadığını görüyorum. Şahsen benim için, döngü yapısında gerçek dizin numaralarını görmeyi seviyorum. Belki de bunun 0..6eşdeğer olduğunu bildiğim Perl'in sözdizimini daha çok anımsattığı içindir (0,1,2,3,4,5,6). Bir 7 görürsem, aslında indeks 7'ye asla ulaşılmadığını görmek için yanındaki operatörü kontrol etmeliyim.


"Son yineleme sayısının" "yineleme sayısı" ndan daha önemli olup olmadığını düşünmenize bağlıdır. 0 tabanlı bir API ile her zaman 1 ...
Jon Skeet

4

"<7" sürümünü kullanın derim çünkü insanların çoğunluğunun okuyacağı şey budur - yani insanlar kodunuzu gözden kaçırırsa, yanlış yorumlayabilirler.

"<" Nin "<=" den daha hızlı olup olmadığı konusunda endişelenmem, sadece okunabilirlik için gidin.

Hız artışı için gitmek istiyorsanız, aşağıdakileri göz önünde bulundurun:

for (int i = 0; i < this->GetCount(); i++)
{
  // Do something
}

Performansı artırmak için bunu biraz yeniden düzenleyebilirsiniz:

const int count = this->GetCount();
for (int i = 0; i < count; ++i)
{
  // Do something
}

GetCount () 'un döngüden kaldırıldığına (çünkü bu her döngüde sorgulanacaktır) ve "i ++" nın "++ i" olarak değiştirilmesine dikkat edin.


İkincisini daha çok seviyorum çünkü okunması daha kolay ama bu-> GetCount () her seferinde gerçekten yeniden hesaplanıyor mu? Bunu değiştirirken buna yakalandım ve sayı aynı kalıyor beni bir yapmaya zorluyor ... bu arada this-> GetCount ()
osp70

GetCount (), ilk örnekte her yineleme olarak adlandırılacaktır. İkinci örnekte yalnızca bir kez çağrılacaktır. GetCount () 'un her seferinde çağrılmasına ihtiyacınız varsa , onu dışarıda tutmaya çalışmazsanız, döngüde bulundurun.
Mark Ingram

Evet denedim ve haklısınız özür dilerim.
osp70

İ ++ yerine ++ i kullanmanın ne önemi var?
Rene Saarsoo

İnts kullanırken küçük bir hız artışı, ancak kendi sınıflarınızı artırıyorsanız artış daha büyük olabilir. Temel olarak ++ i, gerçek değeri artırır, ardından gerçek değeri döndürür. i ++ bir temp var oluşturur, real var'ı artırır ve ardından temp değerini döndürür. ++ i ile var oluşturmaya gerek yoktur.
Mark Ingram

4

C ++ ' !=da tüm STL kapsayıcılarla kullanılabilen kullanmayı tercih ediyorum . Tüm STL kapsayıcı yineleyicileri karşılaştırılamayacak kadar az değildir.


Bu beni biraz korkutuyor, çünkü bir şeyin sayacı benim amaçladığım değerin üzerine yinelemesi ve ardından bunu sonsuz bir döngü haline getirmesi gibi çok küçük bir dış şans var. Şanslar uzak ve kolayca tespit edilebilir - ancak < daha güvenli hissediyor .
Rob Allen

2
Kodunuzda buna benzer bir hata varsa, sessizce devam etmektense çökmek ve yakmak muhtemelen daha iyidir :-)

Doğru cevap budur: Yineleyicinize daha az talep getirir ve kodunuzda bir hata varsa ortaya çıkması daha olasıdır. <İçin argüman kısa görüşlüdür. Belki 70'lerde CPU zamanı için ödeme yaptığınızda sonsuz bir döngü kötü olurdu. '! =' bir hatayı gizleme olasılığı daha düşüktür.
David Nehme

1
Yineleyiciler üzerinden döngü yapmak, sayaçla döngü yapmaktan tamamen farklı bir durumdur. ! = yineleyiciler için gereklidir.
DJClayworth

4

Edsger Dijkstra , 1982'de bu konuda bir makale yazdı ve alt <= i <üst:

En küçük bir doğal sayı var. Alt sınırın hariç tutulması - b) ve d) 'de olduğu gibi - en küçük doğal sayıdan, alt sınırdan başlayarak doğal olmayan sayılar alanına giren bir alt diziye yönelik kuvvetler. Bu çirkin, bu yüzden alt sınır için a) ve c) 'de olduğu gibi ≤'yi tercih ediyoruz. Şimdi en küçük doğal sayıdan başlayan alt dizileri düşünün: Üst sınırın dahil edilmesi, sıra boş olana doğru küçülene kadar ikincisini doğal olmaymaya zorlar. Bu çirkin, bu yüzden üst sınır için <a) ve d) 'yi tercih ediyoruz. Sözleşmenin a) tercih edilmesi gerektiği sonucuna vardık.


3

İlk olarak, 6 veya 7'yi kullanmayın.

Kullanması daha iyi:

int numberOfDays = 7;
for (int day = 0; day < numberOfDays ; day++){

}

Bu durumda kullanmaktan daha iyidir

for (int day = 0; day <= numberOfDays  - 1; day++){

}

Daha da iyisi (Java / C #):

for(int day = 0; day < dayArray.Length; i++){

}

Ve daha da iyisi (C #)

foreach (int day in days){// day : days in Java

}

Ters döngü gerçekten daha hızlıdır, ancak okunması daha zor olduğundan (diğer programcılar sizin tarafınızdan değilse), içeri girmekten kaçınmak daha iyidir. Özellikle C #, Java'da ...


2

Bu durumda 7'nin mantıklı olduğunu söyleyen kalabalığa katılıyorum, ancak 6'nın önemli olduğu durumda, sadece 6. dizine kadar olan nesneler üzerinde hareket ettiğinizi netleştirmek istediğinizi söyleyin, sonra <=, 6'nın görülmesini kolaylaştırdığı için daha iyidir.


öyleyse, i <i <= LAST_FILLED_ARRAY_SLOT ile karşılaştırıldığında boyut
Chris Cudmore

2

Üniversiteye geri döndüğümde, bu iki işlemin CPU'daki işlem süresinde benzer olduğunu hatırlıyorum. Elbette montaj seviyesinde konuşuyoruz.

Bununla birlikte, C # veya Java'dan bahsediyorsanız, birinin diğerine göre hız artışı sağlayacağını gerçekten düşünmüyorum. Kazandığınız birkaç nanosaniye, büyük olasılıkla sunduğunuz herhangi bir karışıklığa değmez.

Şahsen, iş uygulaması açısından mantıklı olan kodu yazar ve kolay okunmasını sağlardım.


2

Bu, doğrudan "Yanlış Kodu Yanlış Görünmek" kategorisine girer .

Java veya C # gibi sıfır tabanlı indeksleme dillerinde insanlar koşuldaki varyasyonlara alışkındır index < count. Bu nedenle, bu fiili sözleşmeden yararlanmak, tek tek hataları daha belirgin hale getirecektir.

Performansla ilgili olarak: bellek ayak izine değecek herhangi bir iyi derleyici, sorun olmayan gibi oluşturmalıdır.


2

Küçük bir kenara, .Net'te bir dizi veya başka bir koleksiyonda dolaşırken,

foreach (string item in myarray)
{
    System.Console.WriteLine(item);
}

sayısal for döngüsünden daha okunaklı olması için. Bu elbette, gerçek sayaç Int'in kendisinin döngü kodunda kullanılmadığını varsayar. Performans değişikliği var mı bilmiyorum.


Bu ayrıca döngü sırasında koleksiyon boyutunu değiştirmemenizi gerektirir.
Jeff B

Yani (i = 0, i <myarray.count, i ++)
Rob Allen

1

İ <7 yazmanın birçok iyi nedeni vardır. 7 kez yinelenen bir döngüde 7 numarasına sahip olmak iyidir. Performans fiilen aynıdır. Hemen hemen herkes i <7 yazar. Okunabilirlik için yazıyorsanız, herkesin anında tanıyacağı formu kullanın.


1

Her zaman tercih ettim:

for ( int count = 7 ; count > 0 ; -- count )

Gerekçen nedir? Gerçekten ilgileniyorum.
Chris Cudmore

bu ters döngü için gayet iyi .. böyle bir şeye ihtiyacınız olursa
ShoeLace

1
Bunun bir nedeni, uP seviyesinde 0'a kıyasla hızlıdır. Bir diğeri de bana iyi okuyor ve sayım bana kaç kere daha kaldığına dair kolay bir gösterge veriyor.
kenny

1

<Kullanmayı alışkanlık haline getirmek, bir dizi üzerinde yineleme yaparken hem siz hem de okuyucu için tutarlı olmasını sağlayacaktır. Herkesin standart bir sözleşmeye sahip olması daha kolay olacaktır. Ve 0 tabanlı dizilere sahip bir dil kullanıyorsanız, <kuraldır.

Bu neredeyse kesinlikle <ve <= arasındaki herhangi bir performans farkından daha önemlidir. Önce işlevselliği ve okunabilirliği hedefleyin, ardından optimize edin.

Diğer bir not da, i ++ yerine ++ i yapma alışkanlığı içinde olmanın daha iyi olacağıdır, çünkü getirme ve artırma geçici bir süre gerektirir ve artırma ve getirme gerektirmez. Tamsayılar için, derleyiciniz muhtemelen geçici olanı optimize edecektir, ancak yineleme türünüz daha karmaşıksa, bunu yapamayabilir.


1

Sihirli sayılar kullanmayın.

Neden 7? (veya bu konuda 6).

kullanmak istediğiniz numara için doğru sembolü kullanın ...

Bu durumda kullanmanın daha iyi olacağını düşünüyorum

for ( int i = 0; i < array.size(); i++ )

1

'<' Ve '<=' operatörleri tam olarak aynı performans maliyetidir.

'<' Operatörü bir standarttır ve sıfır tabanlı bir döngüde okunması daha kolaydır.

İ ++ yerine ++ i kullanmak, C ++ 'da performansı artırır, ancak C #' da değil - Java hakkında bilgim yok.


1

İnsanların gözlemlediği gibi, bahsettiğiniz iki alternatif arasında hiçbir fark yoktur. Bunu doğrulamak için JavaScript'te bazı basit kıyaslamalar yaptım.

Sonuçları burada görebilirsiniz . Bundan net olmayan şey, 1. ve 2. testlerin konumlarını değiştirirsem, bu 2 testin sonuçlarının değişmesi, bu açıkça bir hafıza sorunudur. Bununla birlikte, yinelemenin sırasını tersine çevirdiğim 3. test açıkça daha hızlı.


İkinci durumda neden i = 1 ile başlıyorsunuz?
Eugene Katz

Hrmm, muhtemelen aptalca bir hata? Bunu çok çabuk çırptım, belki 15 dakika.
David Wees

1

Herkesin dediği gibi, dizilerin dışındaki şeyler için bile 0 dizinli yineleyiciler kullanmak gelenekseldir. Her şey burada başlayıp 0bitiyorsa n-1ve alt sınırlar her zaman <=ve üst sınırlar her zaman ise <, kodu gözden geçirirken yapmanız gereken çok daha az düşünme vardır.


1

Harika soru. Cevabım: A tipi kullan ('<')

  • Kaç tane yinelemeniz olduğunu açıkça görürsünüz (7).
  • İki uç nokta arasındaki fark, aralığın genişliğidir
  • Daha az karakter onu daha okunaklı hale getirir
  • Daha çok , son elemanın indeksii < strlen(s) yerine toplam eleman sayısına sahip olursunuz, bu yüzden tekdüzelik önemlidir.

Diğer bir sorun, tüm bu yapıyla ilgili. içinde 3 kezi görünür , bu nedenle yanlış yazılabilir. For döngüsü yapı diyor nasıl yerine ne yapacağını . Bunu benimsemenizi öneririm:

BOOST_FOREACH(i, IntegerInterval(0,7))

Bu daha açık, aynı asm komutlarını vb. Derler. İsterseniz bana IntegerInterval kodunu sorun.


1

Çok fazla cevap var ... ama eklemem gereken bir şey olduğuna inanıyorum.

Tercihim, değişmez sayıların döngüde "i" nin hangi değerleri alacağını açıkça göstermesidir . Sıfır tabanlı bir dizide yineleme durumunda:

for (int i = 0; i <= array.Length - 1; ++i)

Ve sadece döngü yapıyorsanız, bir diziyi yinelemiyorsanız, 1'den 7'ye kadar saymak oldukça sezgiseldir:

for (int i = 1; i <= 7; ++i)

Okunabilirlik, siz profili çıkarana kadar performanstan üstün gelir, çünkü muhtemelen o zamana kadar derleyicinin veya çalışma zamanının kodunuzla ne yapacağını bilmiyorsunuzdur.


1

Bunun !=yerine de kullanabilirsiniz . Bu şekilde, başlatma sırasında bir hata yaparsanız sonsuz bir döngü elde edersiniz, bu hatanın daha erken fark edilmesine ve döngüde takılıp kalmasına neden olan herhangi bir sorunun sınırlandırılmasına neden olur (çok daha sonra bir problem yaşamak ve bulamamak yerine o).


0

Bence her ikisi de tamam, ama seçtiğinizde, birine ya da diğerine bağlı kalın. <= Kullanmaya alışkınsanız, <veya tersini kullanmamaya çalışın.

<= Tercih ederim, ancak sıfırdan başlayan dizinler ile çalıştığınız durumlarda, muhtemelen <= kullanmayı denerim. Yine de tamamen kişisel tercih.


0

Kesinlikle mantıksal bir bakış açısından, bunun eşitliği de test edecek kesin nedenden < countdaha verimli olacağını düşünmelisiniz .<= count<=


Sanmıyorum, assembler'da cmp eax, 7 jl LOOP_START veya cmp eax'a kadar kaynar, 6 jle LOOP_START her ikisi de aynı sayıda döngüye ihtiyaç duyar.
Treb

<= şu şekilde uygulanabilir! (>)
JohnMcG

! (>) hala iki komuttur, ancak Treb, JLE ve JL'nin aynı sayıda saat döngüsü kullandığı konusunda haklıdır, bu nedenle <ve <= aynı süreyi alır.
Jacob Krall
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.