Toepassen

Inleiding
Nu we de werking van de bitwise operators hebben bekeken, kunnen we er wat mee gaan doen.
We gaan enkele standaar PHP functies herschrijven met de opgedane kennis.

Custom 'strtolower()' en 'strtoupper()'
Deze twee functies maken alle chars geven in de parameter in lower-, danwel uppercase.
Dit gaat wij ook doen, met de volgende voorkennis:
In de ASCII tabel heeft de lower- en uppercase versie van een letter dezelfde bitreeks,
op 1 (één) bit na, de 6e bit (die staat voor 32).
Dat maakt dus elke lowercase letter 32 groter in waarde dan de uppercase variant.

Ok, laten we PHP'en :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
# Custom strtoupper() door het uitzetten van de 6e bit.
function strhoofdletters( $string )
{

    # We willen wel ALLE bytes vervangen, dat doen we dus met 'n loopje.
    # Dit kan omdat elke string eigenlijk een array van karakter is.

    for( $i = 0; isset( $string[$i] ); $i++ )
    {

        # Hier gaan we dus de 6e bit uitzetten met de '&' operator.
        # We hebben dus een getal nodig met de volgende bitreeks:
        # 1101 1111, dit zorgt er dus voor dat de reeks hetzelfde blijft, op de 6e bit na :)
        # Dit getal is, 223.

        $string[$i] = $string[$i] & 223;
    }


    # En nu returnen we de uppercase string
    return $string;
}


# Custom strtolower door het aanzetten van de 6e bit.
function strkleineletters( $string )
{

    # Zelfde als bij strhoofdletters()
    for( $i = 0; isset( $string[$i] ); $i++ )
    {

        # Hier gaan we dus de 6e bit aanzetten met de '|' operator.
        # We hebben dus een getal nodig met de volgende bitreeks:
        # 0010 0000, dit zorgt er dus voor dat de reeks hetzelfde blijft, op de 6e bit na :)
        # En zoals eerder gezegt is dit 32.

        $string[$i] = $string[$i] | 32;
    }


    # En nu returnen we de lowercase string
    return $string;
}

?>


Vergelijkingen met de bitwise operators
Hier moet je goed opletten, kijk maar eens naar deze twee voorbeelden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$x
= 7;
if( $x && 8 ) # Geeft true, $x bestaat en 8 is ook helemaal ok.
if( $x & 8 ) # geeft false, $x is 0000 0111, 8 is 0000 1000 dus de 4e bit is niet geset in $x.
?>


Conclusie
Met de bitwise operators kun je bits in een byte veranderen om deze een andere waarde te geven.
Dit hoef je niet nuttig te vinden maar het is altijd leuk om te weten.
Zo kun je ook je vriendjes imponeren door de volgende functie te gebruiken.
Deze functie laat van een karakter zien uit welke bitreeks deze bestaat.
De kennis die daarbij nodig is, is de volgende:
De 8e bit (de meest linkse) staat voor 128, de 7e voor 64, de 6e voor 32, ..., de 2de voor 2 en de eerste voor 1.

De functie ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
# Functie die de bitreeks van een karakter laat zien
function display_bits( $char )
{

       for( $i = 128; $i > 0; (int) $i = $i / 2 )
    {

        if( $i & ord( $char ) )
                echo '1 ';
        else
                echo '0 ';
    }
}

?>


Succes ermee!

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Theorie
  2. Toepassen

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.