[RISOLTO] [C] Assegnamento unsigned a variabile signed

di il
7 risposte

[RISOLTO] [C] Assegnamento unsigned a variabile signed

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 :<

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte