Visualizzazione dei risultati da 1 a 5 su 5

Discussione: XOR help!

  1. #1
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569

    XOR help!

    Durante una funzione, converto in binario un numero decimale con decbin e poi prendo il primo e l'ultimo bit.
    Codice PHP:
    <?php
    #[...]
    $binario decbin($decimale);
    $primo_bit substr($binario01);
    $ultimo_bit substr($binariostrlen($binario), 0);
    if(
    $primo_bit xor $ultimo_bitprintf("XOR vero!");
    else 
    printf("XOR falso!");
    #[...]
    ?>
    Xor dovrebbe funzionare, dato che 0 e 1 fungono come valore booleano true e false.
    Infatti la xor la esegue, ma perché la xor tra 0 e 1 ritorna falsa?
    Se faccio così...
    Codice PHP:
    <?php
    #[...]
    $binario decbin($decimale);
    $primo_bit str_replace(substr($binario01), 1false);
    $primo_bit str_replace(substr($binario01), 0true);

    $ultimo_bit substr($binariostrlen($binario), 0);
    $ultimo_bit str_replace(substr($binario01), 1false);
    $ultimo_bit str_replace(substr($binario01), 0true);

    if(
    $primo_bit xor $ultimo_bitprintf("XOR vero!");
    else 
    printf("XOR falso!");
    #[...]
    ?>
    ...da lo stesso risultato...
    Che devo fare???

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    sicuro che il codice che utilizzi sia corretto?

    Codice PHP:
    <pre>
    <?php

    $decimale 
    $_GET['n']; // recupero il valore direttamente dalla query string
    if(empty($decimale))
        
    $decimale 0;
    $binario decbin($decimale);
    print 
    $binario."\n";
    $primo_bit substr($binario01);
    print 
    $primo_bit."\n";
    $ultimo_bit substr($binario, -1);
    print 
    $ultimo_bit."\n";

    if(
    $primo_bit xor $ultimo_bit)
        
    printf("XOR vero!");
    else
        
    printf("XOR falso!"); 

    ?>
    </pre>
    codice:
    n=3
    11
    1
    1
    XOR falso!
    
    n=4
    100
    1
    0
    XOR vero!
    
    n=5
    101
    1
    1
    XOR falso!
    
    n=6
    110
    1
    0
    XOR vero!
    
    n=1023
    1111111111
    1
    1
    XOR falso!
    
    n=1024
    10000000000
    1
    0
    XOR vero!
    
    n=1025
    10000000001
    1
    1
    XOR falso!
    eXvision

  3. #3
    Non capisco la ragione di tutti quei passaggi.

    mi rifaccio alla tua prima affermazione:


    Durante una funzione, converto in binario un numero decimale con decbin e poi prendo il primo e l'ultimo bit.
    Gia' da questo assunto hai che il primo bit sara' sempre 1 a meno che il numero da convertire sia 0 il che non avrebbe senso (essere a 0 da convertire). Altro assunto: se il primo ed ultimo bit sono entrambi = 1 il numero e' dispari (e XOR = FALSE) invece se il primo ed ultimo bit fossero diversi primo = 1 ultimo = 0 il numero sarebbe pari (XOR = TRUE).

    In ogni caso non avrai mai la condizione con decbin() di avere un 0 XOR 1. Ma solo 1 XOR 0 (TRUE) e 1 XOR 1 (FALSE). Prova:
    Codice PHP:
    $decimale 1214;   // il numero che vuoi

    echo $binario decbin($decimale);
    echo 
    "
    "
    ;

    $primo_bit substr($binario01);
    $ultimo_bit substr($binario, -11);

    if(
    $primo_bit xor $ultimo_bitprintf("XOR vero!");
    else 
    printf("XOR falso!");
    echo 
    "
    "

    var_dump($primo_bit$ultimo_bit);

    // che potrebbe essere equivalente a:

    if($decimale == 0printf("XOR vero!");
    else 
    printf("XOR falso!"); 

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da brodik
    sicuro che il codice che utilizzi sia corretto?
    Piu' che non corretto sinceramente direi il che il secondo blocco che ha postato proprio non lo capisco.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Infatti, ho rivisto il codice e ho notato che a un certo punto il codice ritorna NaN che viene salvato 1.
    Grazie a tutti!

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