Por que true necesita dos bits para dar 1 logico

Iniciado por aurquiel, 19 Noviembre 2016, 18:14 PM

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

aurquiel

Hola he estado jugando con las estructuras para manejar bits, hice este simple programa

#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

#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.

Drewermerc

#1
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 (cpp) [Seleccionar]

struct bits
{
  unsigned int byte:1; //un solo bit asignado
  unsigned int word:1; //un solo bit asignado
};


si quieres leer un poco mas puedes revisar este enlace

Saludos,
Drewermerc

aurquiel

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