Domanda
C'è un consenso approssimativo se si dice che la maschera di bit 0x01 abbia il bit "zeroth" impostato, o il "primo" bit impostato?
Se non c'è un consenso approssimativo sul fatto che esista una risposta giusta generalmente , c'è almeno un consenso approssimativo sul fatto che esiste una risposta corretta contestualmente (ad es. come il codice sta semanticamente usando i bit per determinare la risposta)?
Sfondo
Per essere chiari, ho generalmente familiarità con la codifica di basso livello e sono quindi a mio agio con l'indicizzazione zero, ma essendo un essere umano cresciuto in normali culture umane, mi sento a mio agio anche con l'indicizzazione. Conosco argomenti per entrambe le parti. Ho letto anche ogni altra domanda + le risposte che mi sono state suggerite mentre scrivevo ciò che sembrava riguardare questo tipo di problema, ma nessuno di questi era realmente applicabile ai bit.
Vedi, se stessimo parlando di array, o sequenze, o qualsiasi altra cosa, troverei che sia abbastanza facile decidere - se si tratta di un linguaggio o piattaforma sufficientemente bassi (dove gli indici si mappano direttamente a offset o avere altre proprietà utili se indicizzato a zero), o con persone che hanno una indicizzazione zero radicata, lo sceglierei, quando si tratta di alcune astrazioni di livello superiore dove mi aspetto più abitudini di conteggio umano "naturali", Sceglierei l'altro.
Ma i bit ... i bit sono in questa perversa via di mezzo. I bit sono fondamentalmente astratti (cifre di un numero in binario: quale cifra meno significativa? Prenderò "prima" su "zeroth", perché questo è il conteggio, non l'indicizzazione) ma anche molto rilevante per il lavoro di livello estremamente basso, dove lo zero-indexing è naturale e utile (vuoi solo il n
th bit? Shift 1
di n
).
Motivazione
In pratica, questo è venuto fuori perché non riesco a decidere tra questi due frammenti di codice C:
/* Bits are one-indexed - even in C, this feels more natural */
#define UCHAR_NTH_BIT_m(n) (unsigned char )(1 << ((n) - 1))
/* Bits are zero-indexed - this feels "purer" in some ways */
#define UCHAR_NTH_BIT_m(n) (unsigned char )(1 << (n))
/* NOTE: undefined behavior if (n < 1) or (n < 0), respectively. */