Đếm tự nhiên bắt đầu từ 0
Đây là thuật toán đếm táo trong một giỏ:
count := 0
for each apple in basket
count := count + 1
Sau khi thực hiện ở trên, count
giữ số táo. Nó có thể bằng 0, vì giỏ có thể trống.
Nếu bạn không sử dụng thẻ tín dụng trong cả tháng, bạn có nhận được hóa đơn 1 đô la không? Hay 1 xu?
Khi bạn đặt lại đồng hồ đo hành trình trên đồng hồ đo của xe, nó sẽ chuyển sang 0001 hoặc 0000?
Mảng có thể cung cấp nhiều chế độ xem của cùng một dữ liệu
Hãy xem xét một mảng gồm các cấu trúc 32 bit d
, mỗi cấu trúc được tạo từ 16 bit w
. Mỗi từ được tạo thành từ hai byte 8 bit b
. Trong chỉ mục không, lớp phủ trông rất thuận tiện:
d: | 0 | 1 |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|
Đối tượng 32 bit d[1]
như tại địa chỉ từ w[2]
có thể dễ dàng tính toán bằng cách nhân chỉ số với 2, tỷ lệ kích thước của đối tượng 32 và 16 bit. Hơn nữa, trong địa chỉ byte, nó là b[4]
.
Điều này hoạt động vì số không bằng 0, trong mọi đơn vị đo lường: byte, từ, từ kép, v.v.
Nhìn vào sơ đồ trên: nó trông giống như một cây thước, trong đó các chuyển đổi đơn vị là trực quan.
Với một chỉ mục dựa trên, nó phá vỡ:
d: | 1 | 2 |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|
Bây giờ chúng ta không thể đơn giản nhân d
chỉ số với 2 để lấy w
chỉ mục hoặc 4 để lấy b
chỉ mục. Việc chuyển đổi giữa các đơn vị trở nên vụng về. Ví dụ để đi từ d[2]
đến b[4]
, chúng ta phải tính toán ((2 - 1) * 4) + 1 = 5
.
Chúng ta phải loại trừ độ lệch 1 pesky trong các d
đơn vị, sau đó thực hiện chia tỷ lệ trong hệ tọa độ dựa trên số 0 tự nhiên, sau đó thêm lại pesky 1 theo b
đơn vị. Lưu ý rằng nó không giống nhau 1! Chúng tôi trừ đi một chiều rộng từ kép, nhưng sau đó thêm vào một chiều rộng byte .
Chuyển đổi giữa các chế độ xem khác nhau của dữ liệu trở thành một cái gì đó giống như chuyển đổi Celsius-Fahrenheit.
Những người nói rằng các mảng dựa trên một cách dễ dàng để xử lý ở cấp độ thực hiện, bởi vì chỉ có một phép trừ đơn giản là 1 đang tự lừa mình và bạn. Điều này chỉ đúng nếu chúng tôi không thực hiện bất kỳ tính toán tỷ lệ nào giữa các loại dữ liệu khác nhau. Các tính toán như vậy xảy ra trong bất kỳ chương trình nào có chế độ xem linh hoạt về dữ liệu (ví dụ: mảng đa chiều cũng được truy cập dưới dạng một chiều) hoặc thao tác lưu trữ: ví dụ: bộ cấp phát bộ nhớ, hệ thống tệp hoặc thư viện bộ đệm khung video.
Thu nhỏ chữ số
Trong bất kỳ cơ sở nào, nếu chúng ta muốn sử dụng một vài chữ số nhỏ nhất để thực hiện một phạm vi các giá trị là sức mạnh của cơ sở, chúng ta phải bắt đầu từ số không. Chẳng hạn, trong cơ sở mười, ba chữ số là đủ để cung cấp cho chúng tôi một nghìn giá trị riêng biệt từ 0 đến 999. Nếu chúng tôi bắt đầu từ 1, chúng tôi sẽ tràn qua chỉ một giá trị và chúng tôi cần bốn chữ số.
Điều này rất quan trọng trong máy tính, vì số chữ số trong nhị phân chuyển thành các dòng địa chỉ phần cứng. Ví dụ, một chip ROM có 256 từ trong đó có thể được xử lý từ 0 đến 255, yêu cầu 8 bit: 00000000 đến 11111111. Nếu nó được xử lý từ 1 đến 256, thì cần chín bit. Chúng ta phải lãng phí thêm một dấu vết địa chỉ vào bảng mạch hoặc mạch tích hợp. Vì vậy, những gì có thể xảy ra trong thực tế sẽ là 0 sẽ được gọi1 ở cấp API phần mềm để truy cập chip đó. Một yêu cầu cho từ 1 thực sự sẽ đặt 00000000 trên bus địa chỉ 8 bit. Hoặc nếu không, một yêu cầu trong vòng 1 sẽ dịch để giải quyết 00000001, như mong đợi, nhưng yêu cầu 256 sẽ ánh xạ các trường hợp không sử dụng địa chỉ 8 bit 00000000 chứ không phải là 9 bit địa chỉ 100000000. Cả hai kludges túi cắn là thực sự giải pháp trong tìm kiếm một vấn đề và được tránh hoàn toàn bằng cách sử dụng nhất quán 0 đến 255 tại phần cứng, trong phần mềm và trong tất cả các giao diện và tài liệu người dùng.
Chuyển vị một chiều về cơ bản là ngu ngốc
Hãy xem xét lý thuyết âm nhạc phương Tây chẳng hạn. Chúng tôi có thang đo diatonic với bảy nốt nhạc, nhưng chúng tôi gọi không gian mà chúng bao phủ một quãng tám ! Đảo ngược các khoảng sau đó tuân theo quy tắc chín : ví dụ đảo ngược của một phần ba là một phần sáu (trừ ba từ chín). Vì vậy, ba số khác nhau đang chơi cho một cái gì đó rất đơn giản: bảy (ghi chú theo tỷ lệ), tám (quãng tám) và chín (trừ từ đảo ngược).
Nếu bảy nốt nhạc tạo thành một vách ngăn hoặc vách ngăn, và các khoảng không dựa trên, thì chúng ta sẽ trừ đi từ bảy đến đảo ngược. Tất cả mọi thứ dựa trên bảy.
Hơn nữa, các khoảng có thể dễ dàng xếp chồng lên nhau. Trong hệ thống hiện tại, nếu chúng ta nhảy một phần năm và sau đó một phần tư một lần nữa, và sau đó một phần ba, chúng ta không thể chỉ thêm những thứ này. Khoảng kết quả là hai ít hơn. Nó không phải là một phần mười, nhưng thực sự là một phần mười! Ở mỗi giai đoạn, chúng ta phải trừ đi một. Đi lên một phần năm và sau đó một phần tư không phải là một phần chín, mà chỉ là một quãng tám.
Trong một hệ thống âm nhạc được thiết kế hoàn hảo, chúng tôi chỉ có thể thêm các quãng để xác định các bước nhảy kết quả. Một chuỗi các ghi chú bắt đầu và kết thúc trên cùng một ghi chú sau đó sẽ có một tính chất tương tự như định luật điện áp xung quanh một mạch: tất cả các khoảng sẽ thêm vào không.
Lý thuyết âm nhạc và văn bản đã lỗi thời. Hầu hết nó đã không thay đổi kể từ ngày sáng tác được thực hiện bằng bút lông bằng ánh sáng của một ngọn nến.
Các hệ thống một nền tảng gây nhầm lẫn cho cùng những người không thể xử lý các mảng dựa trên zero
Khi năm 2000 trôi qua, nhiều người đã nhầm lẫn tại sao thiên niên kỷ mới chưa bắt đầu. Những người chỉ ra rằng nó sẽ không bắt đầu cho đến năm 2001 được coi là kẻ săn trộm của đảng và kẻ lừa đảo. Rốt cuộc, bạn ở độ tuổi 20 khi bạn 20 tuổi, phải không? Không phải khi bạn bước sang tuổi 21. Nếu bạn nghĩ rằng thiên niên kỷ bắt đầu vào ngày 1 tháng 1 năm 2000, thì bạn không có quyền phàn nàn về mảng dựa trên số 0 trong bất kỳ ngôn ngữ lập trình nào. Họ làm việc như thế nào chính xác như thế nào bạn thích. .
Lịch là câm, nhưng ít nhất thời gian trong ngày là không dựa trên
Mỗi phút mới trên đồng hồ của bạn bắt đầu bằng: 00 giây. Mỗi giờ mới bắt đầu với 00:00 phút và giây. Và, ít nhất là trên đồng hồ 24 giờ, ngày trôi qua khi nửa đêm đình công và 11:59:59 tăng lên 00:00:00.
Do đó, nếu bạn muốn tính toán giây từ nửa đêm trong khoảng thời gian như 13:53:04, bạn chỉ cần đánh giá 13 * 3600 + 53 * 60 + 4
. Không có 1
bổ sung hoặc trừ.
Kết thúc bài hát về MIDI
Được rồi, nó là gì với các nhạc sĩ, thậm chí được cho là kỹ thuật?
MIDI! Nó sử dụng đánh số dựa trên số không cho các chương trình và kênh trong biểu diễn dây thực tế của tin nhắn, nhưng thiết bị hiển thị dưới dạng 1 dựa trên! Ví dụ, các chương trình 0 đến 127 được gọi là 1 đến 128 trên hầu hết các thiết bị, nhưng một số gọi chúng là 0 đến 127 hoặc thậm chí cho người dùng lựa chọn.
Các chương trình 71 đến 80 được coi là một "ngân hàng" gồm mười. Nó nói như vậy ngay trên bàn đạp MIDI của tôi, ví dụ. Các footswitch được dán nhãn từ 1 đến 10 và nếu tôi ở ngân hàng thứ bảy, họ chọn các chương trình 71 đến 80. Tuy nhiên, một số thiết bị hoặc phần mềm máy tính hiển thị các số chương trình 1-128 là 0 đến 127 hoặc thậm chí cung cấp cho người dùng sự lựa chọn Điều gì tồi tệ hơn: các hệ thống dựa trên một, hoặc hỗn loạn được tạo ra bằng cách sử dụng cả một và không dựa trên cùng một lúc?
Số kênh MIDI được gọi là 1 đến 16, nhưng được biểu thị bằng 0 đến 15 nhị phân. Như thể không phù hợp với bản trình bày một lần, một số thiết bị sử dụng một nút tách rời để định cấu hình số kênh và thông thường, các công tắc chỉ sử dụng mã nhị phân dựa trên số không. Vì vậy, nếu bạn muốn kênh 3, bạn phải chuyển nó sang 0010 (nhị phân 2).