Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107

    [C] function rotate

    ok, ho scritto questo programma per la rotazione dei bit su di un carattere, ma mi da dei risultati strani; il programma dovrebbe infatti cambiare il carattere andando a ruotare i bit, ma a quanto pare la lettera visualizzata è sempre la stessa, per non parlare delle maschere, che non rispecchiano le equazioni che ho impostato.... dove sto sbagliando????
    codice:
    #include<stdio.h>
    
    char rotate(char,int,int);
    
    int main()
    {
       char  lettera,x;
       int spazi,dxosx;
    
       printf("inserire una lettera: ");
        scanf("%c",&lettera);
       printf("\ndi quanti spazi deve ruotare: ");
        scanf("%d",&spazi);
       printf("\na destra (0) o a sinistra (1): ");
        scanf("%d",&dxosx);
       x=rotate(lettera,spazi,dxosx);
       printf("\nrisultato= '%c'",x);
    }
    
    char rotate(char lettera, int spazi, int dxosx)
    {
       char mask=0,appoggio;
             if(dxosx==0)
              {
               mask=2^spazi-1;
               appoggio=mask&lettera;
               lettera>>spazi;
               appoggio^lettera;
              }
             else
              {
                mask=(2^spazi-1)*(2^(8-spazi));
                appoggio=mask&lettera;
                lettera<<spazi;
                appoggio^lettera;
              }
       printf("\n'%d'",mask);
       return lettera;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Cosa fa, secondo te, questa riga

    appoggio^lettera;



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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    xor fra appoggio e lettera, no?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da darksergio
    xor fra appoggio e lettera, no?
    E il risultato dove va?

    E, in modo simile, per questa

    lettera>>spazi;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    non sto agendo direttamente su lettera???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... affatto
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    quindi quando per esempio faccio x<<4 cosa succede, mi crea una copia che devo assegnare ad una variabile??

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Esegue l'operazione e il risultato va in una zona temporanea che viene persa subito dopo ... (alcuni compilatori più "furbi" neanche le compilano queste linee ...)

    Devi indicare la destinazione per ogni operazione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    e perchè il risultato non viene sovrascritto ?.?

    comunque non mi trovo ancora su mask, ora mi compare un simbolo diverso
    ma se per esempio come shift metto 3 a destra mask mi viene=0 e invece dovrebbe essere 7 :s

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    per inciso ora il codice è

    codice:
    #include<stdio.h>
    
    char rotate(char,int,int);
    
    int main()
    {
       char  lettera,x;
       int spazi,dxosx;
    
       printf("inserire una lettera: ");
        scanf("%c",&lettera);
       printf("\ndi quanti spazi deve ruotare: ");
        scanf("%d",&spazi);
       printf("\na destra (0) o a sinistra (1): ");
        scanf("%d",&dxosx);
       x=rotate(lettera,spazi,dxosx);
       printf("\nrisultato= '%c'",x);
    }
    
    char rotate(char lettera, int spazi, int dxosx)
    {
       char mask=0,appoggio,shift,result;
             if(dxosx==0)
              {
               mask=2^spazi-1;
               appoggio=mask&lettera;
               shift=lettera>>spazi;
               result=appoggio^shift;
              }
             else
              {
                mask=(2^spazi-1)*(2^(8-spazi));
                appoggio=mask&lettera;
                shift=lettera<<spazi;
                result=appoggio^shift;
              }
       printf("\n'%d'",mask);
       return result;
    }

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.