5 ms·
I imagine zero based indexing is because resources were scarce and number of bits low in the bad old days. Why waste that zero index. From there is was backward
by aqueueaqueue 2y ago
I imagine zero based indexing is because resources were scarce and number of bits low in the bad old days. Why waste that zero index. From there is was backwards compatibility.
If machine code uses zero then assembly inherits that, them C and everything else. Even JS months!
- tcoff91 2y agoNo, zero based indexing just is based on how arrays actually work. It has nothing to do with resources being scarce. You have an address for the beginning of the array and an offset. The first element has no offset so you use zero. Therefore you naturally end up with zero indexing.
- aqueueaqueue 2y agoYeah but why wasn't that converted to human 1 based indexing at the machine code level or assembly in early machines? Maybe because they didn't want to "hide the bicycle gears"?
- IshKebab 2y agoNo, it's because it doesn't make any sense to do that. It would add a ton of complexity for no benefit.
- robertlagrant 2y agoIt does make some sense: if I have some apples, and I ask a child to count them, they'll address each one starting with the number 1, not the number 0.
- IshKebab 2y agoIndexing/addressing is not counting though. Look at a ruler. It doesn't start at 1.
- robertlagrant 2y agoYes, indeed. But when indexing to an element in an array you aren't measuring from a zero (well, in memory you are, but not conceptually). You're conceptually pointing at an apple.
- IshKebab 2y ago> But when indexing to an element in an array you aren't measuring from a zero (well, in memory you are, but not conceptually). Yes you are!! In memory, and conceptually. You're conceptually moving your finger 0 spaces from the start of the apple array.
- robertlagrant 2y agoI think maybe it's just hard to unlearn the offset mentality. Of course you can convert a direct index mentality to an offset mentality, but I don't think anyone is pointing at the first item in a row of items and thinking "that's a zero offset from the start of the number of items". They're thinking, "That's item number 1".
- IshKebab 2y ago> They're thinking, "That's item number 1". Yeah that's because the distinction between indexing and counting is pretty much irrelevant to every day use, and to maths where you can just hand-wave syntax. So people are very used to doing it "wrong". That's what most of the issue with this debate is. Indexing from 1 is wrong, but people are soooo used to it they just can't get over what they think is the "normal" way.
- robertlagrant 2y ago> Yeah that's because the distinction between indexing and counting is pretty much irrelevant to every day use No it's not. Telling the time or measuring something is 0-indexed. But identifying a thing in a list is 1-indexed.
- leni536 2y agoAssembly doesn't really have indexes, as it doesn't have arrays. It's all addresses and offsets. Offsets are naturally 0-based. Everywhere else, indexing is just a convention, even in natural language and math.
- dsego 2y agoIt's pointer arithmetic I presume, a memory address + zero is still the same memory address, and then you increment to move forward.
- mkl 2y agoNo. Fortran (1957) uses 1-based indexing by default. Probably because matrix and vector indexing in maths is usually 1-based.