Aunque la respuesta aceptada señala que la resistencia es un concepto desde el punto de vista de la memoria. Pero no creo que eso responda la pregunta directamente.
Algunas respuestas me dicen que las operaciones bit a bit no dependen de la resistencia , y el procesador puede representar los bytes de cualquier otra manera. De todos modos, se habla de que la endianess se abstrae.
Pero cuando hacemos algunos cálculos bit a bit en el papel, por ejemplo, ¿no es necesario indicar la resistencia en primer lugar? La mayoría de las veces elegimos un endianess implícitamente.
Por ejemplo, supongamos que tenemos una línea de código como esta
0x1F & 0xEF
¿Cómo calcularías el resultado a mano, en un papel?
MSB 0001 1111 LSB
1110 1111
result: 0000 1111
Así que aquí usamos un formato Big Endian para hacer el cálculo. También puede usar Little Endian para calcular y obtener el mismo resultado.
Por cierto, cuando escribimos números en código, creo que es como un formato Big Endian. 123456
o 0x1F
, los números más significativos comienzan desde la izquierda.
Nuevamente, tan pronto como escribimos un formato binario de un valor en el papel, creo que ya elegimos un Endianess y estamos viendo el valor tal como lo vemos desde la memoria.
Volviendo a la pregunta, una operación de cambio <<
debe considerarse como un cambio de LSB (byte menos significativo) a MSB (byte más significativo) .
Entonces, como para el ejemplo en la pregunta:
numb=1025
Little Endian
LSB 00000001 00000100 00000000 00000000 MSB
Entonces << 10
estaría 10bit
cambiando de LSB a MSB.
Comparación y << 10
operaciones para el formato Little Endian paso a paso:
MSB LSB
00000000 00000000 00000100 00000001 numb(1025)
00000000 00010000 00000100 00000000 << 10
LSB MSB
00000000 00000100 00010000 00000000 numb(1025) << 10, and put in a Little Endian Format
LSB MSB
00000001 00000100 00000000 00000000 numb(1205) in Little Endian format
00000010 00001000 00000000 00000000 << 1
00000100 00010000 00000000 00000000 << 2
00001000 00100000 00000000 00000000 << 3
00010000 01000000 00000000 00000000 << 4
00100000 10000000 00000000 00000000 << 5
01000000 00000000 00000001 00000000 << 6
10000000 00000000 00000010 00000000 << 7
00000000 00000001 00000100 00000000 << 8
00000000 00000010 00001000 00000000 << 9
00000000 00000100 00010000 00000000 << 10 (check this final result!)
¡Guauu! ¡Obtuve el resultado esperado como lo describió el OP!
Los problemas que el OP no obtuvo el resultado esperado son que:
Parece que no cambió de LSB a MSB.
Al cambiar bits en formato Little Endian, debes darte cuenta (gracias a Dios, me doy cuenta) de que:
LSB 10000000 00000000 MSB << 1
es
LSB 00000000 00000001 MSB
, no
LSB 01000000 00000000 MSB
Porque para cada individuo 8bits
, en realidad lo estamos escribiendo en MSB 00000000 LSB
formato Big Endian.
Entonces es como
LSB[ (MSB 10000000 LSB) (MSB 00000000 LSB) ]MSB
Para resumir:
Aunque se dice que las operaciones bit a bit se abstraen de blablablabla ..., cuando calculamos las operaciones bit a mano, todavía necesitamos saber qué endianess estamos utilizando a medida que escribimos el formato binario en el papel. También debemos asegurarnos de que todos los operadores usen la misma resistencia.
El OP no obtuvo el resultado esperado porque hizo mal el cambio.