Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.
What historical reasons exist for this, and what practical advantages does counting from zero have over counting from one?
Note: This question asks for well-explained technical answers, not merely opinions, and is intended to cover computers in general rather than just programming. This question expands upon the Programmers question "Why are structs/arrays zero-based?".