función en c

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

función en c

Mensajepor elborra » Dom, 16 Feb 2014, 20:53

Buenas,vuelvo a la carga con un tema de código en c.

He estado buscando en varias webs de programación pero no doy con la forma, si es posible. Lo que trato de hacer es tener un char representando un numero en base 10, y realizar a continuación una serie de IFs comprobando los 4 o 5 ultimos bits (de menos peso) del char.

Ejemplo:
$this->bbcode_second_pass_code('', 'unsigned char numero = 2; // (0010)

if ( primer_bit (numero) == 0 ) { // Supuestamente evaluaremos 0 "001 0 "
... ejecutamos esto
} else {
...
end;
if ( segundo_bit (numero) == 0 ) { // Supuestamente evaluaremos 1 "00 1 0"
...
} else {
... ahora esto
end;
....etc...')¿Hay alguna operación lógica que haga esto?, crear una función que lo calcule no es opción (ya que haría los ifs comparando directamente con el valor decimal).
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: función en c

Mensajepor na_th_an » Dom, 16 Feb 2014, 21:03

1.- Los bits se cuentan desde la derecha empezando por el 0, el 0 es el "menos significativo" y es el de más a la derecha, y el 7 es el "más significativo" y el de la izquierda del todo.
2.- Hay un montón de formas de mirar bits individualmente. Lo más fácil es usar las operaciones and y or a nivel de bit:

$this->bbcode_second_pass_code('', 'if (a & (2^i)) { el bit i está a 1 }')

O sea, para el bit 0, sería (a & 2^0), o sea (a & 1). Para el bit 3, sería (a & 2^3), o sea, (a & 8). (la operación ^ no existe en C, es sólo para mostrar de donde vienen los números).

O sea, para ver los bits 0 a 7 hay que hacer and con 1, 2, 4, 8, 16, 32, 64 y 128 (¿ves ahora por qué los "agujeros" en los comportamientos de los tiles? mira la función que mueve al protagonista, por ejemplo, y verás cómo se utilizan las operaciones a nivel de bit para comprobar si un tile es plataforma, obstáculo, o mata...)

Puedes combinar potencias de dos para comprobar dos bits. Por ejemplo, para ver si el bit 2 o el bit 3 están a 1, harías AND con 12, que es 2^2 + 2^3 (4 + 8 = 12).
Como diría Rorshach: "Urm..."
Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

Re: función en c

Mensajepor elborra » Dom, 16 Feb 2014, 21:30

Vale, soy un petardo, estaba haciendo las prueba con (numero & 0) en vez de (numero & 1) para el primer bit, precisamente la idea me vino de alguna de esas comparaciones que haceis a lo largo del código. Thxs por la explicación :D

Volver a “General”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 49 invitados