Questo è più di un linguaggio design piuttosto che una domanda di programmazione.Qual è la ragione per cui i linguaggi di alto livello come C#/Java mascherano l'operando del conteggio a spostamento di bit?
Il seguente è un estratto da JLS 15.19 Shift Operators:
Se il tipo promosso dell'operando di sinistra è
int
, solo i cinque bit più basso ordine dell'operando di destra vengono utilizzati per lo shift .Se il tipo di promotore dell'operando di sinistra è
long
, solo i sei bit di ordine inferiore dell'operando di destra vengono utilizzati come distanza di spostamento.
Questo comportamento è anche specified in C#, e mentre io non sono sicuro se è nelle specifiche ufficiali per Javascript (se c'è uno), è anche vero in base alla mia prova, almeno.
La conseguenza è che le seguenti condizioni:
(1 << 32) == 1
comprendo che questa specifica è probabilmente "ispirato" dal fatto che l'hardware sottostante richiede solo 5 bit per l'operando conteggio quando lo spostamento a 32 bit valori (e 6 bit per 64 bit), e posso capire un comportamento del genere specificato a livello di JVM per esempio, ma perché i linguaggi di alto livello come C# e Java mantengono questo comportamento piuttosto di basso livello? Non dovrebbero fornire una visione più astratta oltre l'implementazione hardware e comportarsi in modo più intuitivo? (Ancora meglio se possono assumere un conteggio negativo per significare spostarsi nella direzione ALTRO!)
Determinare se una lingua sia di alto livello o meno è molto soggettiva, ho capito. Penserei, tuttavia, che la maggior parte delle persone classifichi Java e C# come "alta", almeno per i linguaggi non di scripting. – polygenelubricants
Assolutamente. Ma Java e C# conservano ancora le caratteristiche di basso livello, per efficienza (o almeno _ efficienza percepita_). Il tipo 'int' a 32 bit e il mascheramento del numero di turni sono tali caratteristiche. Altre lingue, come Scheme, sono "di livello superiore" in questa materia. –
http://therighttool.hammerprinciple.com/statements/this-is-a-high-level-language – starblue