Código en C

A ver si me podéis echar una mano. Tengo que capturar una secuencia de números en binario y hacer operaciones bit a bit. He hecho ésto:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    char cadena[50];
    int numeros[50];
    int longitud;
    fgets(cadena, 50, stdin);
    longitud=strlen(cadena)-1;

    for(int i=0;i<longitud;i++)
    {
            if (cadena[i]=='1')
                numeros[i]=1;
            else
                numeros[i]=0;
    }

//Aquí vendrán las operaciones
...
         
}


Otra forma que se me ha ocurrido es hacerlo así:
#include <stdio.h>
#include <string.h>

int main()
{
    int i=0;
    int numeros[50];
    int n;
   
    printf ("Introduzca numero distinto de 0 y 1 para terminar\n");
    do
    {
          scanf("%d", &n);
          numeros[i]=n;
          i++;   
    }
    while (n<2);
    i--;
}


¿No hay una manera similar a la primera, que no haya que estar haciendo la "conversión"?

¡Gracias!
manugarrote escribió:¿No hay una manera similar a la primera, que no haya que estar haciendo la "conversión"?


No estoy seguro de entenderte, pero si lo que quieres es "simplificar" esto
            if (cadena[i]=='1')
                numeros[i]=1;
            else
                numeros[i]=0;


podrias cambiarlo por:
numeros[i] = cadena[i] - '0';

claro que asi pierdes el pseudo-control de errores que tienes de la otra manera (que era MUY pseudo igualmente XD)

Igual si das mas detalles de que es lo que quieres hacer...
JanKusanagi escribió:
manugarrote escribió:¿No hay una manera similar a la primera, que no haya que estar haciendo la "conversión"?


No estoy seguro de entenderte, pero si lo que quieres es "simplificar" esto
            if (cadena[i]=='1')
                numeros[i]=1;
            else
                numeros[i]=0;


podrias cambiarlo por:
numeros[i] = cadena[i] - '0';

claro que asi pierdes el pseudo-control de errores que tienes de la otra manera (que era MUY pseudo igualmente XD)

Igual si das mas detalles de que es lo que quieres hacer...

Gracias por contestarme.

Lo que quiero hacer es. El usuario me va a pasar una serie de números en binario (yo no sé cuántos van a ser). Una vez que tengo la serie, tengo que hacer operaciones con ella, por ejemplo: hacer un AND lógico del valor de la 3ª posición con el que ocupa la 5ª posición de otro.
Para empezar: qué quieres hacer? Capturar números por teclado? Qué piensas hacer con ellos?
Vamos a ver, si tu tienes un número en decimal, a la máquina le da igual en qué base esté, solo es la representación de un número, quiero decir:
unsigned char=8;

Aunque valga 8, internamente es igual que decir
unsgined char=0x08;

O ponerlo en binario directamente. No te hace falta comprar con '1' o '0'. Además de que es una bestialidad porque cuando acceda al array de char
Luego, si quieres mover bits, puedes usar el operado "<<" o ">>" para correr bits a la izquierda o a la derecha respectivamente.
Y para terminar, si solo quieres quedarte con ciertos bits, emplea máscara basadas en AND y OR.

Por ejemplo, tengo el número 9, en binario 1001 y quiero quedar con el 5º bit mas signficativo y el resto ignorarlo:
unsigned char numero=9; // También "unsigned char numero=0x09;"
numero = numero & 0x08; // Hago un AND de 0000 1001 con 0000 1000 para quedarme con el 5º bit más significativo.


Cosas así. Da mas información para que te ayudemos.
El tema de las máscaras, desplazamientos y demás no es problema.

Quiero capturar por teclado un número que el usuario meta como si fuese binario. Una vez que lo tenga ya haré yo las operaciones. El problema es que no sé como capturarlo.

Le puedo decir que lo pase en decimal y luego operar yo con él, pero quiero que lo meta de la forma: 01110101101
4 respuestas