Una aplicación en videojuegos es la famosa función Fast inverse square root. Sin embargo, no se puede usar con GML porque al hacer corrimiento de bits en un número flotante, se convierte a entero.
Otra aplicación son las banderas o flags. En lugar de utilizar muchas variables booleanas (true o false) se utiliza una sola variable donde cada bit tiene un significado. Por ejemplo, se puede usar una variable powerups, donde cada bit representa el powerup que se ha desbloqueado.
Como menciona Johann, el desplazamiento de bits es una forma rápida y económica de dividir y multiplicar por potencias de 2.
bar << 2 es equivalente a bar * 4
bar >> 1 es equivalente a floor(bar / 2)
Yo lo he utilizado para guardar el estado de los botones de diferentes mandos y detectar los press y release con las operaciones and y not a nivel bit.
[gml]
global.inputPrev = global.input; //update prev
global.input = 0; //clear
for( i=0; i<16; i++ )
global.input |= scJoystickCheck(global.inputCode[2,i]) << i;
global.inputPress = global.input & ~global.inputPrev;
global.inputRel = ~global.input & global.inputPrev;
[/gml]
Otra aplicación son las banderas o flags. En lugar de utilizar muchas variables booleanas (true o false) se utiliza una sola variable donde cada bit tiene un significado. Por ejemplo, se puede usar una variable powerups, donde cada bit representa el powerup que se ha desbloqueado.
Como menciona Johann, el desplazamiento de bits es una forma rápida y económica de dividir y multiplicar por potencias de 2.
bar << 2 es equivalente a bar * 4
bar >> 1 es equivalente a floor(bar / 2)
Yo lo he utilizado para guardar el estado de los botones de diferentes mandos y detectar los press y release con las operaciones and y not a nivel bit.
[gml]
global.inputPrev = global.input; //update prev
global.input = 0; //clear
for( i=0; i<16; i++ )
global.input |= scJoystickCheck(global.inputCode[2,i]) << i;
global.inputPress = global.input & ~global.inputPrev;
global.inputRel = ~global.input & global.inputPrev;
[/gml]