Dopo avere estratto i bit da una variabile di seguito (char,short,long),
dovrei calcolare il relativo valore dalla formula:
Val_variabile= bit[len](pow 2,n-1)+....+bit[2](pow 2,2)+bit[1](pow 2,1)+ bit[0](pow 2,0)
decrescendo man mano
dove bit[] è l'array di bit della variabile.
come posso inserirlo sempre in questo codice ?
codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define n_len 32
void bit_show(short,char [],short[]);

int main()
{
short menu, bit[n_len],k; unsigned char len;
union word32bit
{ long L;
  short S[2];
  char  C[4];
}word;

do
{  puts("\n\n\nseleziona");
   puts("\n[0] uscita programma");
   puts("\n[1] rappresenta intero char in binario");
   puts("\n[2] rappresenta intero short in binario");
   puts("\n[3] rappresenta intero long in binario");
   fflush(stdin); scanf("%hd",&menu);
switch(menu)
{
            case 0:exit(0);
            case 1:
                 len=sizeof(char);
                 printf("immettere intero char C=");
                 fflush(stdin); scanf("%d",&(word.C[0]));
                 puts("char in decimale, esadecimale e binario");
                 printf("C=%+10hd,   hex=%02x",word.C[0],word.C[0]);
                 bit_show(sizeof(char),word.C,bit); break;
            case 2:
                  len=sizeof(short);
                 printf("immettere intero short S=");
                 fflush(stdin); scanf("%hd",&(word.S[0]));
                 puts("short in decimale, esadecimale e binario");
                 printf("S=%+10hd,   hex=%04x",word.S[0],word.S[0]);
                 bit_show(sizeof(short),word.C,bit); break;
            case 3:
                  len=sizeof(long);
                 printf("immettere intero long L=");
                 fflush(stdin); scanf("%hd",&(word.L));
                 puts("long in decimale, esadecimale e binario");
                 printf("L=%+10d,   hex=%081x",word.L,word.L);
                 bit_show(sizeof(long),word.C,bit); break;
            default : exit(1);
}
for(k=8*len-1;k>=0;k--)
(k%4==0)?
printf("  %d",bit[k]):printf(" %d",bit[k]);
}while(menu !=0);
}


void bit_show (short len,char ch[],short bit[n_len])
{
    short j,jc;
    char c;
    for(j=0; j<n_len;j++) bit[j]=0;
    
    for(jc=0; jc<len; jc++)
    {
    c=ch[jc];
    for(j=0;j<8; j++)      
    { 
    bit[j+8*jc]=c&1;
   c=c>>1;
    }
  }
}