Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Operatore >>> __ Spostamento a destra bit a bit senza segno

    Raga, ho il seguente problema:

    In actionscript esiste l'operatore >>> che è uguale all'operatore di spostamento a destra bit a bit (>>) a eccezione del fatto che non conserva il segno originale poiché nei bit a sinistra vengono sempre inseriti dei valori 0.

    esempio

    x= -1 >>> 1; // output: 2147483647

    -1 decimale è 11111111111111111111111111111111 binario (trentadue volte 1), e quando si sposta verso destra (senza segno) di 1 bit, il bit meno significativo (ovvero quello all'estrema destra) viene scartato mentre quello più significativo (ovvero quello all'estrema sinistra) viene riempito con uno 0. Il risultato è 01111111111111111111111111111111 binario che rappresenta il numero intero a 2147483647 a 32 bit.

    Ora, siccome questo operatore in php non esiste, avete una funzione già pronta che faccia ciò? Anche qualche consiglio è ben accetto.

    Grazie in anticipo

  2. #2

  3. #3

    Re: Operatore >>> __ Spostamento a destra bit a bit senza segno

    direi che, decisamente, l'operatore esiste come il resto degli operatori per la matematica booleana

    I due << e >> ci sono e funzionano perfettamente ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    no forse non avete letto bene il mio post

    so bene che in php esistono << e >>, ma non esistono <<< e >>>

    quindi mi chiedevo se qualcuno, che magari ha già affrontato un problema simile, avesse una funzione che possa fare al caso mio...

  5. #5
    Originariamente inviato da filippo.toso
    Ti consiglio di iniziare leggendo il manuale ufficiale:

    http://www.php.net/manual/en/languag...rs.bitwise.php
    Il commento http://www.php.net/manual/en/languag...wise.php#57281 dovrebbe fare al caso tuo.

  6. #6
    Originariamente inviato da psycho54h
    no forse non avete letto bene il mio post

    so bene che in php esistono << e >>, ma non esistono <<< e >>>

    quindi mi chiedevo se qualcuno, che magari ha già affrontato un problema simile, avesse una funzione che possa fare al caso mio...
    ehm, mi sa che ci sta un problema di fondo

    allora ... il "segno" non è altro che un bit utilizzato per indicare se il valore è positivo o negativo ... INFATTI nel caso che questo bit non venga utilizzati gli INTERI da 4 byte vanno da 0 a 4 miliardi e qualcosa invece che da meno 2 miliardi e qualcosa a più 2 miliardi e qualcosa ove il valore negativo

    Di conseguenza se tu hai
    01111111111111111111111111111111

    o hai
    11111111111111111111111111111111

    ti ritrovi con due sequenze di bit ben specifiche che assumono valori considerevolmente diversi in base alla tipizzazione della variabile ... ovvero se è SIGNED (con segno) o se è UNSIGNED (senza segno)

    Direttamente dalla pagina http://it2.php.net/manual/en/language.types.integer.php del manuale
    The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
    si può comunque ottenere un UNSIGNED INTEGER usando sprintf('%u', $valore_numerico) ... in realtà non è che si converte in UNSIGNED INTEGER internamente verrà poi trattato come un float

    Codice come
    pow(2, $currentBit)

    ti restituirà
    -2147483648

    Ora, detto questo, se a te serve avere, alla fine, devi valori USIGNED puoi usare la scappatoia dello sprintf
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Grazie mille a todos, il link che filippo ha gentilmente postato è proprio quello di cui avevo bisogno, fa esattamente quello che >>> fa in C++, in Javascript, in Actionscript e chissà in quale altro codice.
    È un vero peccato che in PHP non ci sia, ma poco male, mi bastava questa funzione.

    Grazie mille ancora per l'aiuto

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.