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;
}
}
}