Doğal sayma sıfırda başlar
İşte sepetteki elmaları sayma algoritması:
count := 0
for each apple in basket
count := count + 1
Yukarıdakilerin uygulanmasından sonra, count
elma sayısını tutar. Sıfır olabilir, çünkü sepetler boş olabilir.
Kredi kartınızı bir ay boyunca kullanmazsanız, 1 dolarlık bir fatura alıyor musunuz? Veya 1 kuruş?
Aracınızdaki kilometre sayacındaki kilometre sayacını sıfırladığınızda, 0001 mi yoksa 0000 mi olur?
Diziler aynı verinin birden fazla görüntüsünü sağlayabilir
32 bit yapı dizisini göz önünde bulundurun d
, her biri 16 bitlik sözcüklerden oluşur. w
. Her kelime iki 8 bit bayttan oluşur b
. Sıfır endekslemenin altında, kaplama çok uygun görünüyor:
d: | 0 | 1 |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|
32 bit nesne d[1]
kelime adresinde olduğu gibi w[2]
32 ile 16 bitlik nesnelerin boyutlarının oranı olan indeksi 2 ile çarparak kolayca hesaplanır. Ayrıca, bayt adreslemede b[4]
.
Bu işe yarar, çünkü her ölçüm biriminde sıfır sıfırdır: bayt, word, double word ve benzeri.
Yukarıdaki şemaya bakın: birim dönüşümlerin sezgisel olduğu bir cetvel gibi görünüyor.
Bir tane temel indekslemeyle, sonları:
d: | 1 | 2 |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|
Şimdi basitçe çarpılamayız. d
almak için 2 ile indeksleyin w
dizini almak b
indeks. Birimler arasındaki dönüşüm sakar hale gelir. Örneğin gitmek d[2]
için b[4]
hesaplamak zorundayız ((2 - 1) * 4) + 1 = 5
.
Bu sinir bozucu 1 önyargı çıkarmak zorundayız d
birimler, daha sonra doğal sıfır tabanlı koordinat sisteminde ölçeklendirme yapın ve ardından sinir bozucu 1'i geri ekleyin. b
birimleri. Aynı 1 olmadığını unutmayın! Bir çift kelimelik genişlik çıkarırız, fakat daha sonra bir bayt genişlik ekleriz. .
Verilerin farklı görünümleri arasında dönüştürme yapmak, Celsius-Fahrenheit dönüşümü gibi bir şey haline gelir.
Tek tabanlı dizilerin uygulama düzeyinde başa çıkmanın kolay olduğunu söyleyenler, çünkü sadece 1'in basit bir çıkarması kendilerini ve sizi kandırıyor. Bu, yalnızca farklı veri türleri arasında herhangi bir ölçeklendirme hesaplama yapmazsak geçerlidir. Bu tür hesaplamalar, veriler üzerinde esnek bir görüşe sahip (örneğin tek boyutlu olarak da erişilen çok boyutlu bir dizi) veya depolamayı yöneten herhangi bir programda gerçekleşir: örneğin, bir bellek ayırıcısı, dosya sistemi veya video çerçevesi tampon kütüphanesi.
Rakamları En Aza İndirme
Herhangi bir temelde, tabanın gücü olan bir değer aralığı uygulamak için en az sayıyı kullanmak istiyorsak, sıfırdan başlamalıyız. Örneğin, on tabanda, 0 ila 999 arasında bin farklı değer vermemiz için üç basamak yeterlidir. 1'den başlarsak, sadece bir değerle taşarız ve dört basamağa ihtiyacımız vardır.
Bu, bilgisayarlarda önemlidir, çünkü ikili sayıdaki sayıların sayısı donanım adres satırlarına çevrilir. Örneğin, 256 kelimelik bir ROM yongası, 8 bit: 0 00000000 - 11111111 gerektiren 0 - 255 arasında adreslenebilir. 1 - 256 arasında adreslenirse dokuz bit gerekir. Devre kartına veya entegre devreye israfı bir kez daha israf etmeliyiz. Öyleyse, pratikte yaşanabilecek şey 0 olacaktır denilen Bu yonga erişmek için yazılım API düzeyinde 1. 1 kelimesi için bir istek aslında 8 bitlik adres yoluna 00000000 koyar. Veya, 1 için bir istek beklendiği gibi 00000001 adresine çevrilecektir, ancak 256 için bir talep 9 bitlik adres 100000000 yerine başka kullanılmayan 8 bitlik bir adres olan 00000000 ile eşleşecektir. problem arayışı içinde çözümler ve donanımda, yazılımda ve tüm kullanıcı arayüzlerinde ve dokümantasyonunda sürekli olarak 0 ila 255 kullanılarak tamamen önlenir.
Tek tabanlı yer değiştirmeler temelde aptalca
Örneğin Batı müziği teorisini düşünün. Diyatonik Kantarlarımız Yedi Notlar, ancak kapladıkları alanı diyoruz. oktav ! Aralıkların ters çevrilmesi daha sonra kuralını izler. dokuz : örneğin, üçte birinin tersine çevrilmesi altıncıdır (dokuzu üçe çıkartın). Bu yüzden üç farklı sayı çok basit bir şey için oyunda: yedi (ölçeğe göre notlar), sekiz (oktav) ve dokuz (tersinden çevirerek).
Yedi nota bir septav veya heptav yapılmışsa ve aralıklar sıfır temelli olsaydı, yediden tersine çevirirdik. Her şey yedie dayanıyor.
Ayrıca, aralıklar kolayca istiflenebilir. Şu andaki sistemde, eğer beşte bir sonra tekrar dördüncü, sonra da üçte biri oranında sıçrarsak, bunları ekleyemeyiz. Elde edilen aralık iki daha azdır. Bu on iki değil, aslında onda biri! Her aşamada bir tane çıkarmamız gerekiyor. Beşinci ve dördüncü sırada olmak dokuzuncu değil, sadece bir oktav.
Akıllıca tasarlanmış bir müzik sisteminde, ortaya çıkan sıçramaları belirlemek için sadece aralıklar ekleyebiliriz. Aynı nota başlayan ve biten bir nota dizisi daha sonra bir devre etrafındaki voltaj yasasına benzer bir özelliğe sahip olacaktır: tüm aralıklar sıfıra eklenir.
Müzik teorisi ve yazımı çok eski. Oluşan günlerin bir mum ışığında tüy kalemleriyle yapılmasından bu yana çoğu değişmedi.
Tek tabanlı sistemler, sıfır tabanlı dizileri idare edemeyen aynı insanları karıştırıyor
2000 yılı yuvarlandığında, yeni binyılın neden başlamadığı birçok insanın kafası karıştı. 2001 yılına kadar başlamayacağına işaret edenler, parti kakanı ve cüce olarak kabul edildi. Ne de olsa 20 yaşına girdiğinde 20 yaşına giriyorsun, değil mi? 21 yaşını doldurduğunuzda değil. Eğer binyılın 1 Ocak 2000'de başladığını düşünüyorsanız, herhangi bir programlama dilinde sıfır tabanlı dizilerden şikayet etme hakkınız yoktur. Tam olarak nasıl istersen çalışırlar. (Ancak, evet, tek tabanlı yer değiştirme ve dizilerin savunucuları serseri ve parti kakasıdır. Yüzyıllar XX00 yıldan başlamalı, bin yıl X000 yıldan başlamalıdır.)
Takvimler aptal, ancak günün en az zamanı sıfırdır.
Saatinizdeki her yeni dakika, 00 saniye ile başlar. Her yeni saat 00:00 dakika ve saniye ile başlar. Ve en azından 24 saatlik bir saatte, gece yarısı saldırdığında günler ve 11:59:59 00: 00'a kadar artar.
Böylece, gece yarısından saat 13: 53: 04 gibi bir süre için saniyeyi hesaplamak istiyorsanız, sadece değerlendirmeniz gerekir. 13 * 3600 + 53 * 60 + 4
. İnsipid yok 1
toplama veya çıkarma.
MIDI hakkında rant kapanıyor
Tamam, müzisyenler, sözde teknik olanlar bile neyin nesi?
MİDİ! Mesajların asıl kablo gösterimindeki programlar ve kanallar için sıfır tabanlı numaralandırma kullanır, ancak dişli 1 tabanlı görüntüler! Örneğin, 0 ila 127 programları çoğu viteste 1 ila 128 olarak adlandırılır, ancak bazıları onları 0 ila 127 olarak çağırır, hatta kullanıcıya bir seçenek sunar.
71'den 80'e kadar olan programlar, on'luk bir "banka" olarak değerlendirilir. Mesela MIDI pedalımda çok doğru yazıyor. Ayak şalterleri 1 ila 10 arasında etiketlenir ve yedinci sıradaysam, 71 ila 80 arasındaki programları seçerler. Ancak, bazı cihazlar veya bilgisayar yazılımları 1-128 program numaralarını 0 ila 127 olarak gösterir, hatta kullanıcıya bir seçim! Daha kötüsü: tek tabanlı sistemler mi, yoksa aynı anda hem sıfır hem de sıfır kullanılarak yaratılan kaos mu?
MIDI kanal numaraları 1 ila 16 olarak adlandırılır, ancak 0 ila 15 ikili ile temsil edilir. Sanki bir tabanlı sunuma rağmen, bazı donanımlar bir kanal numarasını yapılandırmak için bir diski kullanıyor ve bu anahtarlar genellikle sıfır tabanlı ikili kodu kullanıyor. Bu nedenle, 3. kanalı istiyorsanız, onu 0010'a (ikili 2) geçirmelisiniz.