*** Welcome to piglix ***

Zero-based numbering


Zero-based numbering or index origin = 0 is a way of numbering in which the initial element of a sequence is assigned the index 0, rather than the index 1 as is typical in everyday non-mathematical/non-programming circumstances. Under zero-based numbering, the initial element is sometimes termed the zeroth element, rather than the first element; zeroth is a coined ordinal number corresponding to the number zero. In some cases, an object or value that does not (originally) belong to a given sequence, but which could be naturally placed before its initial element, may be termed the zeroth element. There is not wide agreement regarding the correctness of using zero as an ordinal (nor regarding the use of the term zeroth) as it creates ambiguity for all subsequent elements of the sequence when lacking context.

Numbering sequences starting at 0 is quite common in mathematics notation, in particular in combinatorics, though programming languages for mathematics usually index from 1. In computer science, array indices usually start at 0 in modern programming languages, so computer programmers might use zeroth in situations where others might use first, and so forth. In some mathematical contexts, zero-based numbering can be used without confusion, when ordinal forms have well established meaning with an obvious candidate to come before first; for instance a zeroth derivative of a function is the function itself, obtained by differentiating zero times. Such usage corresponds to naming an element not properly belonging to the sequence but preceding it: the zeroth derivative is not really a derivative at all. However, just as the first derivative precedes the second derivative, so also does the zeroth derivative (or the original function itself) precede the first derivative.

The primary origin of using zero in enumerating data entities in computer programming lies in the available machine instructions, which allowed to "jump" in the linear sequence of instructions, given a specified condition. This is a crucial necessity to implement branching in instruction sequences. The main available conditions were "on zero" and "on negative" of the content in a specified register. One of the most frequently used instructions for implementing loops was a "decrement and jump if zero". That is, any data structure worth enumerating was dealt with in loops and zero was at hand to control these loops. All higher level language loop control structures (do-while, repeat-until, for-step-to, ...) are based on these elementary machine instructions and would not suggest the use of zero themselves to this extent.


...
Wikipedia

...