Esto es más un diseño de lenguaje que una cuestión de programación.¿Cuál es la razón por la que los lenguajes de alto nivel como C#/Java enmascaran el operando de recuento de desplazamiento de bit?
El siguiente es un extracto de JLS 15.19 Shift Operators:
Si el tipo promovido del operando de la izquierda es
int
, sólo se utilizan los cinco bits de menor orden del operando de la derecha como de la distancia de desplazamiento .Si el tipo promocionado del operando de la izquierda es
long
, solo se utilizan los seis bits de menor orden del operando de la derecha como distancia de desplazamiento.
Este comportamiento es también specified in C#, y aunque no estoy seguro de si es en la especificación oficial de Javascript (si hay uno), también es cierto basado en mi propia prueba por lo menos.
La consecuencia es que se cumple lo siguiente:
(1 << 32) == 1
entiendo que esta especificación es, probablemente, "inspirado" por el hecho de que el hardware subyacente sólo toma 5 bits para el operando recuento cuando se pasa de 32 bits valores (y 6 bits para 64 bits), y puedo entender dicho comportamiento especificado en el nivel de JVM, por ejemplo, pero ¿por qué los lenguajes de alto nivel como C# y Java conservan este comportamiento de bajo nivel? ¿No deberían proporcionar una visión más abstracta más allá de la implementación del hardware y comportarse de manera más intuitiva? (Incluso mejor si se puede hacer un conteo negativo en el sentido de cambiar en la otra dirección!)
La determinación de si un lenguaje es de alto nivel o no es muy subjetivo, lo entiendo. Sin embargo, creo que la mayoría de las personas clasificaría Java y C# como "alto", al menos para los lenguajes que no usan scripts. – polygenelubricants
Absolutamente. Pero Java y C# aún conservan características de bajo nivel, por el bien de la eficiencia (o al menos _eficacia percibida_). El tipo 'int' de 32 bits y el enmascaramiento de recuento de turnos son tales características. Otros idiomas, como Scheme, son de "nivel superior" en esa materia. –
http://therighttool.hammerprinciple.com/statements/this-is-a-high-level-language – starblue