Menghitung secara alami dimulai dari nol
Berikut adalah algoritma untuk menghitung apel dalam keranjang:
count := 0
for each apple in basket
count := count + 1
Setelah eksekusi di atas, count
tahan jumlah apel. Mungkin nol, karena keranjang bisa kosong.
Jika Anda tidak menggunakan kartu kredit selama sebulan penuh, apakah Anda mendapat tagihan 1 dolar? Atau 1 sen?
Ketika Anda mengatur ulang meter perjalanan pada odometer mobil Anda, apakah itu menjadi 0001 atau 0000?
Array dapat memberikan banyak tampilan data yang sama
Pertimbangkan susunan struktur 32 bit d
, yang masing-masing terbuat dari 16 kata bit w
. Setiap kata terdiri dari dua byte 8 bit b
. Di bawah pengindeksan nol, hamparan terlihat sangat nyaman:
d: | 0 | 1 |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|
Objek 32 bit d[1]
seperti pada alamat kata w[2]
yang mudah dihitung dengan mengalikan indeks dengan 2, yang merupakan rasio ukuran objek 32 dan 16 bit. Selanjutnya, dalam pengalamatan byte, itu b[4]
.
Ini berfungsi karena nol adalah nol, di setiap unit pengukuran: byte, kata, kata ganda dan sebagainya.
Lihat diagram di atas: ini terlihat seperti penggaris, di mana konversi satuan bersifat intuitif.
Dengan satu pengindeksan berbasis, itu rusak:
d: | 1 | 2 |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|
Sekarang kita tidak bisa hanya mengalikan d
indeks dengan 2 untuk mendapatkan w
indeks, atau dengan 4 untuk mendapatkan b
indeks. Konversi antar unit menjadi kikuk. Misalnya untuk beralih dari d[2]
ke b[4]
, kita harus menghitung ((2 - 1) * 4) + 1 = 5
.
Kita harus mengurangi bias sial 1 dalam d
unit, kemudian melakukan penskalaan dalam sistem koordinat berbasis nol alami, dan kemudian menambahkan kembali sial 1 dalam b
unit. Perhatikan bahwa ini tidak sama dengan 1! Kami mengurangi satu lebar dua kata, tetapi kemudian menambahkan satu byte lebar .
Mengubah antara berbagai tampilan data menjadi konversi seperti Celsius-Fahrenheit.
Mereka yang mengatakan bahwa array berbasis satu mudah ditangani pada tingkat implementasi, karena hanya ada pengurangan sederhana dari 1 yang membodohi diri mereka sendiri, dan Anda. Ini benar hanya jika kita tidak melakukan perhitungan penskalaan di antara tipe data yang berbeda. Penghitungan seperti itu terjadi dalam program apa pun yang memiliki tampilan data yang fleksibel (mis. Array multi dimensi juga diakses sebagai satu dimensi) atau yang memanipulasi penyimpanan: misalnya, pengalokasi memori, sistem file, atau pustaka penyangga bingkai video.
Meminimalkan Digit
Dalam basis apa pun, jika kita ingin menggunakan digit paling sedikit untuk mengimplementasikan rentang nilai yang merupakan kekuatan basis, kita harus mulai dari nol. Misalnya, dalam basis sepuluh, tiga digit sudah cukup untuk memberi kita seribu nilai berbeda dari 0 hingga 999. Jika kita mulai dari 1, kita meluap dengan hanya satu nilai, dan kita membutuhkan empat digit.
Ini penting di komputer, karena jumlah digit dalam biner diterjemahkan ke garis alamat perangkat keras. Misalnya, sebuah chip ROM dengan 256 kata di dalamnya dapat dialamatkan dari 0 hingga 255, yang membutuhkan 8 bit: 00000000 hingga 11111111. Jika ditangani dari 1 hingga 256, maka diperlukan sembilan bit. Kita harus dengan sia-sia menambahkan satu lagi jejak alamat ke papan sirkuit atau sirkuit terintegrasi. Jadi apa yang mungkin terjadi dalam praktek adalah bahwa 0 hanya akan dipanggil1 di tingkat API perangkat lunak untuk mengakses chip itu. Permintaan untuk kata 1 sebenarnya akan menempatkan 00000000 pada bus alamat 8 bit. Atau, permintaan untuk 1 akan diterjemahkan ke alamat 00000001, seperti yang diharapkan, tetapi permintaan untuk 256 akan dipetakan ke alamat 8 bit yang tidak digunakan 00000000 daripada alamat 9 bit 100000000. Kedua kludges penggigit tas ini benar-benar solusi dalam mencari masalah , dan dihindari sepenuhnya dengan secara konsisten menggunakan 0 hingga 255 di perangkat keras, dalam perangkat lunak, dan di semua antarmuka pengguna dan dokumentasi.
Pemindahan berbasis satu pada dasarnya bodoh
Pertimbangkan teori musik Barat misalnya. Kami memiliki timbangan diatonis dengan tujuh not, tetapi kami menyebut ruang yang mencakup oktaf ! Inversi interval kemudian mengikuti aturan sembilan : misalnya inversi yang ketiga adalah keenam (kurangi tiga dari sembilan). Jadi tiga angka berbeda berperan untuk sesuatu yang sangat sederhana: tujuh (catatan dalam skala), delapan (oktaf) dan sembilan (kurangi dari menjadi terbalik).
Jika tujuh not membuat septave atau heptave, dan interval berdasarkan nol, maka kita akan mengurangi dari tujuh menjadi terbalik. Semuanya berdasarkan tujuh.
Selanjutnya, interval bisa dengan mudah ditumpuk. Dalam sistem saat ini, jika kita melompat dengan seperlima dan kemudian dengan keempat lagi, dan kemudian oleh ketiga, kita tidak bisa hanya menambahkan ini. Interval yang dihasilkan adalah dua lebih sedikit. Ini bukan keduabelas, tetapi sebenarnya sepersepuluh! Pada setiap tahap, kita harus mengurangi satu. Naik seperlima dan kemudian yang keempat bukan yang kesembilan, tetapi hanya satu oktaf.
Dalam sistem musik yang dirancang dengan baik, kita bisa menambahkan interval untuk menentukan lompatan yang dihasilkan. Urutan not yang dimulai dan diakhiri pada not yang sama akan memiliki sifat yang mirip dengan hukum voltase di sekitar rangkaian: semua interval akan menambah nol.
Teori dan penulisan musik sudah usang. Sebagian besar tidak berubah sejak hari-hari menulis dilakukan dengan pena bulu oleh cahaya lilin.
Sistem berbasis satu membingungkan orang yang sama yang tidak dapat menangani array berbasis nol
Ketika tahun 2000 bergulir, banyak orang bingung mengapa milenium baru belum dimulai. Mereka yang menunjukkan bahwa itu tidak akan dimulai sampai tahun 2001 dianggap sebagai pemburu dan penjahat pesta. Lagi pula, Anda berusia 20-an ketika berusia 20 tahun, bukan? Tidak ketika Anda berusia 21 tahun. Jika Anda berpikir bahwa milenium dimulai pada 1 Januari 2000, maka Anda tidak punya hak untuk mengeluh tentang array berbasis nol dalam bahasa pemrograman apa pun. Mereka bekerja persis bagaimana Anda suka. (Tapi, ya, para pendukung perpindahan berbasis satu dan array adalah dweeb dan partai-poopers. Berabad-abad harus dimulai pada tahun XX00, dan ribuan tahun pada X000 tahun.)
Kalender bodoh, tetapi setidaknya waktu dalam sehari adalah nol
Setiap menit pada jam tangan Anda dimulai dengan: 00 detik. Setiap jam baru dimulai dengan 00:00 menit dan detik. Dan, setidaknya pada jam 24 jam, hari bergulir sekitar ketika mogok tengah malam dan kenaikan 11:59:59 hingga 00:00:00.
Jadi jika Anda ingin menghitung detik dari tengah malam untuk waktu seperti 13:53:04, Anda hanya perlu mengevaluasi 13 * 3600 + 53 * 60 + 4
. Tidak ada 1
penambahan atau pengurangan yang tidak keren.
Menutup kata-kata kasar tentang MIDI
Oke, ada apa dengan musisi, bahkan yang dianggap teknis?
MIDI! Ini menggunakan penomoran berbasis nol untuk program dan saluran di representasi kawat yang sebenarnya dari pesan, tetapi gigi menampilkannya sebagai 1 berdasarkan! Misalnya program 0 hingga 127 dipanggil 1 hingga 128 pada sebagian besar gigi, tetapi beberapa memanggilnya 0 hingga 127 atau bahkan memberi pengguna pilihan.
Program 71 hingga 80 dianggap sebagai "bank" dari sepuluh. Katanya tepat di pedal MIDI saya, misalnya. Footswitch diberi label dari 1 hingga 10 dan jika saya berada di bank ketujuh, mereka memilih program 71 hingga 80. Namun, beberapa perangkat atau perangkat lunak komputer menampilkan nomor program 1-128 sebagai 0 hingga 127, atau bahkan memberi pengguna sebuah pilihan! Apa yang lebih buruk: sistem berbasis satu, atau kekacauan dibuat dengan menggunakan keduanya berbasis dan nol pada saat yang sama?
Nomor saluran MIDI disebut 1 hingga 16, tetapi diwakili oleh 0 hingga 15 biner. Seolah-olah karena dendam untuk presentasi berbasis satu, beberapa gigi menggunakan dispswitch untuk mengkonfigurasi nomor saluran dan, seringkali, sakelar ini hanya menggunakan kode biner berbasis nol. Jadi jika Anda ingin saluran 3, Anda harus beralih ke 0010 (biner 2).