¿Todos los desplazamientos de números sin signo son desplazamientos lógicos y todos los desplazamientos de números con signo son desplazamientos aritméticos?
Para datos sin firmar, todos los cambios son cambios lógicos; para datos firmados, la elección de utilizar cambios lógicos o aritméticos varía de un compilador a otro.
Ya sea que se desplace hacia la izquierda o hacia la derecha, los espacios en blanco se llenan con 0 y los bits desplazados se ingresan en los bits altos o se descartan. Esto depende del tipo de datos.
El desplazamiento a la izquierda es exactamente lo mismo que el desplazamiento lógico. Al desplazarse a la derecha, el bit vacío de la izquierda se llena con 0 o 1. Según el bit de signo, si es un número positivo, se llena. con 0, si es un número negativo se rellena con 1.
Mientras los datos desplazados no se descarten, los desplazamientos lógicos y los desplazamientos aritméticos son iguales a la multiplicación y la división, por lo que el número de bits de signo en el complemento del desplazamiento aritmético a la derecha es el mismo que el signo. poco.
Expansión:
Al multiplicar un divisor, el número de dígitos del dividendo es igual al número de dígitos del signo. p> Cuando el multiplicador o divisor es 2n, utilice el desplazamiento aritmético para completar rápidamente las operaciones de multiplicación y división de enteros. Un desplazamiento aritmético hacia la izquierda de n bits equivale a multiplicar por 2n desplazando cada bit del número original n bits hacia la izquierda, descartando los bits de orden superior desplazados a la izquierda y reemplazando todos los bits de orden inferior vacíos a la derecha. con 0
El método de desplazar lógicamente n bits hacia la izquierda es mover cada bit del número original hacia la izquierda n bits, descartar los bits altos desplazados hacia la izquierda y reemplazar todos los bits bajos vacíos en la derecha con "0". Un desplazamiento lógico a la derecha de n bits se realiza desplazando cada bit del número original hacia la derecha en n bits, descartando los bits bajos desplazados hacia la derecha y reemplazando los bits altos vacíos a la izquierda con "0".