Consulta Problema Con Bits - Cual es la respuesta correcta?

Iniciado por palacio29, 21 Octubre 2016, 05:16 AM

0 Miembros y 1 Visitante están viendo este tema.

palacio29

Hola

Tengo una duda con respecto a bits en C.

Me piden que haga un programa en donde cada persona ingresada tenga un numero de categoria.

Es decir..

Persona 1 = Horacio
Categoria= W

El problema es que la categoria no me la dan con numeros y me piden que halle la categorai, copio textual "El numero de categoria se encuentra dentro del unsigned char en los cuatro bits mas significativos(los de la izquierda). Entonces me piden que a traves de la letra que ingresaron, que con operaciones de bits, halle la categoria.

Entonces yo hago esto

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    char letra='w';
    int numero;

    numero=letra&(15<<4);

    printf("\nEl numero es %d",numero);



    return 0;
}


Osea, agarro la letra, uso una mascara de 15 y la corro cuatro lugares y me evalua en esos 4 bits si estan prendidos o no.
El resultado de "w" seria 112, seria la categoria.

El problema es que no se si esa es la categoria correcta.
Porque yo puedo hacer que esos 4 bits mas significativos ponerlos los 4 en la posicion menos significativa y aplicar la mascara de 15, y dejarlos ahi y me daria una categoria 7.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    char letra='w';
    int numero;

    numero=(letra>>4)&15;

    printf("\nEl numero es %d",numero);



    return 0;
}




Entonces esa es mi duda, cual seria la respuesta correcta?

Eternal Idol

#1
Cita de: palacio29 en 21 Octubre 2016, 05:16 AM
El problema es que la categoria no me la dan con numeros y me piden que halle la categorai, copio textual "El numero de categoria se encuentra dentro del unsigned char en los cuatro bits mas significativos(los de la izquierda). Entonces me piden que a traves de la letra que ingresaron, que con operaciones de bits, halle la categoria.

Si partis de w: 119d, 0x77, 01110111b el resultado correcto es 00000111b es decir 7. Con el desplazamiento a derecha lo conseguis, no se para que intentas usar una mascara en primer lugar (salvo que estes probando con codigo donde el MSB este a la derecha y no a la izquierda).

PD. No crees mas hilos sobre manipulacion de bits, ya tenes dos.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

palacio29

Cita de: Eternal Idol en 21 Octubre 2016, 09:31 AM
Si partis de w: 119d, 0x77, 01110111b el resultado correcto es 00000111b es decir 7. Con el desplazamiento a derecha lo conseguis, no se para que intentas usar una mascara en primer lugar (salvo que estes probando con codigo donde el MSB este a la derecha y no a la izquierda).

PD. No crees mas hilos sobre manipulacion de bits, ya tenes dos.

Disculpa, pense que sabia el tema pero tenia esta duda. No logro entender porque se pasan los 4 bits totalmente hacia la derecha, porque si los paso a la derecha me da un 7 y si yo paso los 4 bits mas significativos a la derecha, hago una mascara y luego los paso nuevamente hacia los bits mas significativos(hacia su posicion inicial), me daria un 112.

Eternal Idol

#3
Para que te de 112 no estas tomando 4 bits sino 8:
01110000b

Con 4 bits podes expresar un conjunto de numeros que va de 0 a 15.
0000b
1111b

Por eso en el otro hilo te pregunte el tamaño del numero.

PD. Si quisieras obtener 112 no haria falta mover nada simplemente usarias la mascara 0xF0.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

palacio29

Cita de: Eternal Idol en 21 Octubre 2016, 15:21 PM
Para que te de 112 no estas tomando 4 bits sino 8:
01110000b

Con 4 bits podes expresar un conjunto de numeros que va de 0 a 15.
0000b
1111b

PD. Si quisieras obtener 112 no haria falta mover nada simplemente usarias la mascara 0xF0.

Gracias, ahi ya entendi.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón