Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27

    [C] ritornare signed/unsigned int da funzione

    Piccolo problema

    da una funzione devo far ritornare un valore che puo essere sia signed che unsigned

    come posso fare?

    e poi ho problemi con la coercizione nella funzione, devo poter trasformare un signed in unsigned e viceversa ma soluzioni tipo '(unsigned int) intero' non funzionano

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Chiarisci un po' meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Usa questo tipo:
    codice:
    typedef union DoubleSigned {
    
       unsigned int u;
          signed int s;
    
    }DoubleSigned;
    
    DoubleSigned* funzione(void);
    
    /*Codice*/
    Anche se in effetti un semplice cast, funzionerebbe lo stesso ...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Continuo a non capire

    1) la necessita' di avere i due tipi di dato

    2) perche' non usi solamente un opportuno cast ...

    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    ecco il codice intero

    codice:
    #include<malloc.h>
    
    int bintodec(char binario[]);
    int bintodec(char binario[])
    {
    //preparazione variabili
    int lunghezza,I,decimale;
    decimale=0;
    I=0;
    while(binario[I]=='0' || binario[I]=='1' || binario[I]=='-' || binario[I]=='+') I++;
    lunghezza=I;
    I=0;
    //conversione numero binario
    for(I;I<lunghezza;I++)
    if(binario[I]=='1')decimale=decimale+(1<<(lunghezza-I-1));
    //rettifica del segno
    switch(binario[0])
       {
       case '-':
          decimale= -decimale;
          (unsigned int)decimale;//riga di prova
          printf("%d",decimale);//riga di prova
          break;
       case '+':
          break;
       default:
          (unsigned int)decimale;
          break;
       } 
    return decimale;
    }
    il programma prende una stringa contenente un numero binario che puo essere positivo,negativo o assoluto, ignora il segno poi in base all'elemento 0 dell'array in ingresso formatta il numero decimale ottenuto

    dal momento che il segno + viene omesso nella printf ho inserito due righe di prova e ho passato alla funzione un numero binario negativo. le due righe di prova dovrebbero, dopo che il numero decimale è stato convertito in negativo, togliere il segno e stampare un assoluto

    invece resta negativo

    l'istruzione printf di controllo interno alla funzione esclude anche un problema legato al ritorno dalla funzione

    che ne pensate?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    Originariamente inviato da oregon
    Continuo a non capire

    1) la necessita' di avere i due tipi di dato

    2) perche' non usi solamente un opportuno cast ...

    alla prima credo di aver risposto ^^

    la seconda é il motivo per cui ho postato ç_ç

    EDIT

    ho provato anche la forma decimale=(unsigned int)decimale o decimale=(unsigned)decimale ma non va

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da shinichi
    alla prima credo di aver risposto ^^

    la seconda é il motivo per cui ho postato ç_ç
    In realta' hai risposto solamente con il codice ...

    E come pensavo, e' la questione che e' mal posta ...

    Tu stai scrivendo una funzione che dovrebbe trasformare un valore da binario a decimale.

    Se non ho capito male, tu inserisci anche il segno (- o +) davanti alla stringa di 0 e 1 ...

    Ma se un valore binario e' negativo non lo e' per il segno, ma per il fatto che esso venga inteso in forma "pura" o in "complemento a 2".

    La stessa sequenza di valori binari quindi, puo' essere intesa sia con segno sia senza segno.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    Originariamente inviato da oregon
    Ma se un valore binario e' negativo non lo e' per il segno, ma per il fatto che esso venga inteso in forma "pura" o in "complemento a 2".

    La stessa sequenza di valori binari quindi, puo' essere intesa sia con segno sia senza segno.

    ehm.. no, questo programma deve accettare in input una forma aritmetica, nella quale un numero binario è negativo se negativo è il segno. poi, ovviamente ho preparato gia altre funzioni per trattare una stringa in modo da operare in forma aritmetica, booleana o linguaggio-macchina

    ora, non studio informatica ma se non sbaglio quella da te citata è la forma negativa in linguaggio macchina dove si usa quella forma per via della struttura logica circolare del calcolatore che puo eseguire solo somme e per questo la forma negativa si crea passando un numero alla posizione equivalente ma nel semicerchio di valori opposto

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da shinichi
    ehm.. no, questo programma deve accettare in input una forma aritmetica, nella quale un numero binario è negativo se negativo è il segno.
    Quindi, facendo un esempio, il formato di input sara'

    -101010100

    oppure

    +100100100

    e che si deve intendere il valore binario "puro" con il segno determinato dal primo carattere ... e questo segno dovra' essere presente in maniera obbligatoria oppure potra' anche mancare (e in questo caso?).

    Se non definisci in maniera "chiara" l'input della tua funzione, non si potra' dare una risposta se non per approssimazioni successive ...

    poi, ovviamente ho preparato gia altre funzioni per trattare una stringa in modo da operare in forma aritmetica, booleana o linguaggio-macchina

    ora, non studio informatica ma se non sbaglio quella da te citata è la forma negativa in linguaggio macchina dove si usa quella forma per via della struttura logica circolare del calcolatore che puo eseguire solo somme e per questo la forma negativa si crea passando un numero alla posizione equivalente ma nel semicerchio di valori opposto
    Quella citata da me e' l'unica forma di rappresentazione dei valori binari con segno.

    Non esiste una forma "aritmetica" o "linguaggio macchina" o chissa' cosa ...

    Esiste una rappresentazione binaria "pura" e una "con segno", con il metodo del complemento a due. Tutti i computer utilizzano questa forme.

    La unsigned e' la "pura" ... la signed e' la "C2" ...

    L'incongruenza della tua domanda e' proprio qui ... tu vuoi utilizzare una rappresentazione binaria che non ha senso per il sistema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    27
    Originariamente inviato da oregon
    Quindi, facendo un esempio, il formato di input sara'

    -101010100

    oppure

    +100100100

    e che si deve intendere il valore binario "puro" con il segno determinato dal primo carattere ... e questo segno dovra' essere presente in maniera obbligatoria oppure potra' anche mancare (e in questo caso?).

    Se non definisci in maniera "chiara" l'input della tua funzione, non si potra' dare una risposta se non per approssimazioni successive ...



    Quella citata da me e' l'unica forma di rappresentazione dei valori binari con segno.

    Non esiste una forma "aritmetica" o "linguaggio macchina" o chissa' cosa ...

    Esiste una rappresentazione binaria "pura" e una "con segno", con il metodo del complemento a due. Tutti i computer utilizzano questa forme.

    La unsigned e' la "pura" ... la signed e' la "C2" ...

    L'incongruenza della tua domanda e' proprio qui ... tu vuoi utilizzare una rappresentazione binaria che non ha senso per il sistema ...
    allora, ho premesso che l'input non fa riferimento alla logica del computer ma alla logica aritmetica e ora mi spiego.
    Esiste una forma aritmetica e una linguaggio macchina,una che conta il segno, l'altra che conta la forma pura o c2.

    Dato che continuiamo a non comprenderci la mettero in modo diverso

    Quella a cui io faccio riferimento è la forma aritmetica lineare, dove la positivita o negatività di un numero è data dalla posizione in una retta relativa di un punto rispetto ad un secondo di riferimento, tale logica comprende i valori che vanno da - infinito a + infinito

    la forma che io definisco linguaggio macchina e tu definisci unica è la forma aritmetica circolare

    dove la positività o negativita di un numero è data dalla posizione di un punto in un circonferenza rispetto ad altri due punti diametralmente opposti, tale logica comprende valori che vanno da 0 ad infinito

    ora, quella a cui fai riferimento tu è la logica circolare usata da tutti i pc, l'algoritmo invece deve operare su un numero che risponde alla logica aritmetica lineare.

    quindi se ha il segno - il numero decimale sarà negativo
    se ha il segno + sarà positivo
    se non ha segno è assoluto, cioè esiste contemporaneamente in entrambe le semirette che hanno origine in 0.

    ora, per trattare il numero decimale che ritorna dalla funzione in logica lineare mi servono quindi 3 possibilita

    la prima è che ritorni un decimale di tipo signed positivo, la seconda è che torni un decimale di tipo signed negativo, la terza è che mi torni un decimale di tipo unsigned.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.