elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Por que true necesita dos bits para dar 1 logico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Por que true necesita dos bits para dar 1 logico  (Leído 1,377 veces)
aurquiel

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Por que true necesita dos bits para dar 1 logico
« 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.


« Última modificación: 19 Noviembre 2016, 18:15 pm por aurquiel » En línea

Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Por que true necesita dos bits para dar 1 logico
« Respuesta #1 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

Saludos,
Drewermerc


« Última modificación: 19 Noviembre 2016, 20:55 pm por Drewermerc » En línea

aurquiel

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Re: Por que true necesita dos bits para dar 1 logico
« Respuesta #2 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines