Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como saber si el bit menos significativo está apagado o encendido?

Estas en el tema de Como saber si el bit menos significativo está apagado o encendido? en el foro de C/C++ en Foros del Web. Muy buen día para todos. En el manual que estoy estudiando se propone el siguiente ejercicio: Diseña un programa C que pida por teclado un ...
  #1 (permalink)  
Antiguo 06/10/2013, 14:06
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Información Como saber si el bit menos significativo está apagado o encendido?

Muy buen día para todos.
En el manual que estoy estudiando se propone el siguiente ejercicio:
Diseña un programa C que pida por teclado un número entero y diga si es par o impar.
Bueno de esta manera se puede saber:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.     int a = 317;
  5.     a = a%2;
  6.     printf((a==0) ? "\n Par \n":"\n Impar\n");
  7.  
  8.     return 0;
  9. }
Leyendo un poco con mi “enfermedad” de ser más profundo o reinventar la
rueda encontré esto.-
Cita:
Fijarse si el bit menos significativo es cero. Si esto es así, el número entero es par. Si es uno, el número es impar.
El caso es que no tengo ni idea de cómo lograr esto, me podrían poner un ejemplo?.-

Un gran saludo y desde ya muchas gracias.-
Daniel
  #2 (permalink)  
Antiguo 06/10/2013, 17:57
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Como saber si el bit menos significativo está apagado o encendido?

Supongo que eso será en sistema binario, con lo que primero deberías pasar ese int a binario y despues comprobar el bit menos significativo, es decir el de mas a la derecha.

Unos ejemplos....

DEC - BIN - PAR/IMPAR?
5 - 101 IMPAR
8 - 1000 PAR
11 - 1011 IMPAR


Pos eso....
  #3 (permalink)  
Antiguo 07/10/2013, 07:25
 
Fecha de Ingreso: marzo-2002
Ubicación: Valencia
Mensajes: 65
Antigüedad: 22 años, 1 mes
Puntos: 2
Respuesta: Como saber si el bit menos significativo está apagado o encendido?

Saludos,

Sería suficiente con un:

int lsb = a & 0x01;

De esta forma si el último bit es 0, lsb será 0, y si es 1, será 1... Y eso te dice si es par o impar :)

Mira el operador AND.
  #4 (permalink)  
Antiguo 07/10/2013, 07:42
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 4 meses
Puntos: 46
Respuesta: Como saber si el bit menos significativo está apagado o encendido?

Bueno, primero decir que realmente el compilador cuando tu le pones a%2 lo traduce a la otra alternativa porque es menos costosa computacionalmente. Pero como funciona esta alternativa? Primero hay que pensar en numeros en base 2 (0 y 1).

Así que cualquier numero que tengamos en base 10 lo podemos pasar a base 2 y viceversa. Así que teniendo un numero en base 2 es muy facil saber si es divisible por 2, igual que si tenemos un numero en base 10 es muy facil saber si es divisible por 10.

No se hasta que punto sabras como funciona la base 2, pero como resumen digamos que va en potencias de 2, así que cada número nos indica si esa potencia de 2 pertenece al número, me explico: el 5, en base 2 es ...101, porque no es más que 2^2 + 2^0 = 5.
Entonces aquí es donde entra la pregunta, como se si un número es par? Pues muy fácil, lo único que tengo que mirar es la última potencia, que es 2^0 = 1, ya que el resto todas dan numeros pares. Así que si en mi número de base 2 si aparece la potencia 2^0 será impar, ya que tendrás una suma de numeros pares más un numero impar. En caso contrario el número sera par, ya que tendrás la suma de potencias de base 2, que son pares.

Despues de la teoria viene la práctica, para hacer esto en la práctica se hace uso del operador lógico a nivel de bits AND (en C : &) Y lo que hacemos es comparar cualquier numero con el 1, es decir
Código C:
Ver original
  1. a&1;
Y porque esto produce el resultado que queremos, pues muy simple, porque al hacer AND con el número 1 nos cargamos el resto de potencias de 2 y únicamente nos quedamos con la que nos interesa, 2^0. Ya que 1 en base 2 es 000...01.
Y hacemos un AND lógico entre los números, si el número con el que hacemos el AND es impar, acabara en 1 y si hacemos un AND con el 1 acabaremos con un número =/= 0. Si es el contrario acabaremos con 0.

Así que resumiendo podemos hacer una función que nos indique si un numero es par.
Que devuelve 1 si es par y 0 si no lo es.
Código C:
Ver original
  1. int espar(int a)
  2. {
  3.     return a & 1 ? 0 : 1;
  4. }
  #5 (permalink)  
Antiguo 07/10/2013, 11:21
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como saber si el bit menos significativo está apagado o encendido?

Hola a todos.
Cita:
Hago esta aclaración porque en muchos casos me toman como uno de 15 o 20 y en realidad tengo 61 años, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar.-
DooBie, gracias por la ayuda, la teoría la tenía solo que no sabía cómo implementarla.-
hermanosvalor, perfecto es lo que necesitaba, sólo y antes de leer sobre AND, int lsb = a & 0x01; si yo pongo 0x01, 0x02, 0x03, 0x04 etc. estoy accediendo individualmente a los 8 bits o estoy errado?.-
L3m0n, que puedo decirte, excelente, maravilloso, como me ayuda este tipo de mini tutorial, mil gracias (de hecho ni entendí un carajo pero ya me caerá la ficha).-

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.  
  5.     int a = 19,b = 0;
  6.     b = a & 1;
  7.     printf((b==0) ? "\n Par \n":"\n Impar\n");
  8.  
  9.     return 0;
  10. }
Un gran saludo.
Daniel

Etiquetas: int, menos, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:11.