Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: aurquiel en 19 Noviembre 2016, 18:14 pm



Título: Por que true necesita dos bits para dar 1 logico
Publicado por: aurquiel en 19 Noviembre 2016, 18:14 pm
Hola he estado jugando con las estructuras para manejar bits, hice este simple programa

Código:
#include <iostream>

using namespace std;

int main()
{
    struct bits
    {
        int byte:1; //un solo bit asignado
        int word:1; //un solo bit asignado
    };

    bits gate1=
    {
        true, //al "objeto" gate1.byte se le asigna 1
        false //al "objeto" gate1.word se le asigna 0
    };
    cout<<gate1.byte<<"\t"<<gate1.word<<endl;
}

Donde el resultado es el siguiente

-1       0

En cambio si aumento el campo de bits de bytea dos asi

Código:
#include <iostream>

using namespace std;

int main()
{
    struct bits
    {
        int byte:2; //dos bits asignados
        int word:1; //un solo bit asignado
    };

    bits gate1=
    {
        true, //al "objeto" gate1.byte se le asigna 1
        false //al "objeto" gate1.word se le asigna 0
    };
    cout<<gate1.byte<<"\t"<<gate1.word<<endl;
}

Donde el resultado es el siguiente

1       0

Notese la diferencia de signo del 1,alguien me podría dar una explicación a esto, ya que true solo tomo el valor de 1 no deberia ser suficiente con solo asignarle un bit para hacerlo.


Título: Re: Por que true necesita dos bits para dar 1 logico
Publicado por: Drewermerc en 19 Noviembre 2016, 20:52 pm
hola aurquiel.
Eso pasa porque al usar int byte:1 lo estas usando como signed y cuando accedes a un solo bit de la declacion, este solo va a poder tomar valores de 0 y -1.
Para poder usar solo un bit y almacenar 1 ó 0 solo basta con declararlo como unsigned.

Código
  1. struct bits
  2. {
  3.   unsigned int byte:1; //un solo bit asignado
  4.   unsigned int word:1; //un solo bit asignado
  5. };
  6.  

si quieres leer un poco mas puedes revisar este enlace (http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html)

Saludos,
Drewermerc


Título: Re: Por que true necesita dos bits para dar 1 logico
Publicado por: aurquiel en 19 Noviembre 2016, 22:13 pm
Gracias  ;-)

Es magnifico como Internet  puede conectarme con mentes como la tuya en este caso.

De verdad había una explicación lógica para lo que me planteaba