UTNianos

Versión completa: Ejercicio Info 1 Ayuda
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas noches,

Les pido su ayuda con este ejer de info 1 ( campos de bit).

En el mismo necesito ingresar un hexadecimal y verificar si el 4 bit mas significativo es 1.
Si lo es tengo que contar los 1 y 0 de los 4 bits menos significativos.
El problema es que con algunos ingresos me muestra el conteo y otros no.
Les agradezco su ayuda.[/code]

#include <stdio.h>
#include <conio.h>


int main(){
int A,Mask=0X0800,I,M=1,Cont1=0,Cont2=0;

printf("\n ingrese un entero hexadecimal\n");
scanf("\n%x", &A);
if (A&Mask==0x0800){
for(I=0;I<=3;I++){

if(A&M==1){
Cont1++;
A>>1;
}
else
Cont2++;
A>>1;


}

printf("\n Cont1=%d Cont0=%d\n",Cont1,Cont2);
getch();
Si necesitas ver que haya un 1 en el cuarto bit mas significativo, la mascara seria:


int Mask = 0x1000; // 0001 0000 0000 0000



Tambien podrias cambiar la condicion del if por:


if (A & Mask) {}


Sigue siendo lo mismo, pero me gusta leerlo mas asi =P
Hay algo raro aca. Si ingresás un hexa de un dígito, son cuatro bits. Si es así, la máscara no tiene sentido. O sea, está mal.
Si podés ingresar números de más de un dígito, no entiendo por qué solo contar los cuatro bits menos significativos. Pero podría ser....
Por otro lado, si tenés que preguntar por el cuarto bit más significativo, deberías ver el tamaño de la palabra. Vos asumiste que son palabras de cuatro bytes.

Una cosa, en el if más interno, hacés el corrimiento de A, pero también lo hacés al final del for. Entonces, cuando se cumplen todas las condiciones, corre A dos veces.
URLs de referencia