Visualizzazione dei risultati da 1 a 4 su 4

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ti basta tenere tutti gli 0 fino al primo 1 e poi cambiare gli altri partendo dal numero positivo:
    00010100 -> 11101100

    Comunque il tuo codice presenta diversi errori:
    i>r è sempre falsa: 0 è verosimilmente sempre minore di r, al più è uguale.
    Inoltre r-i inizia con r-0=r che è una cella oltre la fine.
    Anche se tu avessi scritto correttamente i<r e r-i-1 l'algoritmo non sarebbe stato comunque corretto. Infatti partire dal bit più significativo è come supporre che ci sia un riporto ad ogni bit, mentre tu avrai riporto finché hai 1 e poi basta:

    00010100 -> 11101011 + 1 -> 11101100
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    32
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Ti basta tenere tutti gli 0 fino al primo 1 e poi cambiare gli altri partendo dal numero positivo:
    00010100 -> 11101100

    Comunque il tuo codice presenta diversi errori:
    i>r è sempre falsa: 0 è verosimilmente sempre minore di r, al più è uguale.
    Inoltre r-i inizia con r-0=r che è una cella oltre la fine.
    Anche se tu avessi scritto correttamente i<r e r-i-1 l'algoritmo non sarebbe stato comunque corretto. Infatti partire dal bit più significativo è come supporre che ci sia un riporto ad ogni bit, mentre tu avrai riporto finché hai 1 e poi basta:

    00010100 -> 11101011 + 1 -> 11101100
    Oddio che sbadato! hai ragione!

    codice:
    for(int i=1;i<r;i++){                
        if(bin[r-i]==1)
            bin[r-i]=0;
        else
            bin[r-i]=1;
    }
    if(bin[r-1]==0)
        bin[r-1]=1;
    Ecco così è corretto però in effetti come hai detto tu ho constatato che anche correggendo ciò , comunque non ottengo ancora quello che mi serviva.

    Quindi sto tentando di ragionare sul tuo consiglio ...
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Ti basta tenere tutti gli 0 fino al primo 1 e poi cambiare gli altri partendo dal numero positivo:
    00010100 -> 11101100
    Appena riesco ad ottenere qualcosa lo posto

Tag per questa discussione

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 © 2026 vBulletin Solutions, Inc. All rights reserved.