EDIT: Problema risolto. 11/02/2019
Questo programma serve per poter ricavare il range di valori contenuti all'interno di una variabile di un determinato tipo, senza fare riferimento alla libreria limits.h :
#include <stdio.h>
void printDim(short nBytes, int Signed);
int main()
{
printf("Signed Char dim:\n");
printDim(1,1);
printf("Signed Short dim:\n");
printDim(2,1);
printf("Signed Long dim:\n");
printDim(4,1);
printf("Unsigned Char dim:\n");
printDim(1,0);
printf("Unsigned Short dim:\n");
printDim(2,0);
printf("Unsigned Long dim:\n");
printDim(4,0);
return 0;
}
void printDim(short nBytes, int Signed)
{
nBytes *= 8; //Trasformo i bytes in bits
unsigned long max = 1;
for(int i = 0;i < nBytes;i++)
{
if((i + 1) == nBytes) //Se si tratta dell'ultimo bit
max = ((max - 1) * 2) +1; //Per evitare che l'ultimo valore superi la dimensione del suo contenitore mi assicuro che arrivi precisamente all'ultimo numero che può contenere un unsigned long.
else
max *= 2;
}
signed long minVal = ( Signed == 1 ) ? -((max/2)+1) : 0;
unsigned long maxVal = ( Signed == 1 ) ? max/2 : max;
printf("FROM %10lu\n TO %10lu\n\n",minVal,maxVal);
}
OUTPUT:
Sto cercando una soluzione a questo problema, non saprei come effettuare correttamente la conversione da unsigned a signed in questa espressione. So che una possibile soluzione per quello che devo fare è inserire il meno direttamente sotto forma di testo nel printf e poi inserire come parametro il resto dell'espressione ma volevo riuscire a inserirlo all'interno di una variabile questo valore. Grazie in anticipo per le risposte!
PS: Mi sono appena iscritto e ho letto il regolamento... ho già scritto questo post anche su un altro forum, ma ahimè dopo giorni non ho ricevuto risposta e spero di trovare qui una community più attiva in cui rimanere, non me ne vogliate :<