/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Underlig konstruktion
Fra : Christian Jørgensen


Dato : 05-05-01 11:30

Jeg sidder og vrider mine små grå for at finde ud hvordan flg.
kode skal tolkes:

<?php

$b1 = 1;
$b2 = 2;
$b3 = 3;

$tal = $b1 << 24 | $b2 << 16 | $b3 << 8 | $b4;

print $tal;

?>

Outputtet er 16909056

Nogen der kan forklare - Jeg har, uden held, forsøgt at finde
noget i manualen.

--
Christian Jørgensen
http://www.razor.dk

"Uden cola og hikke - Duer helten ikke!"

 
 
Jonas Kongslund (05-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 05-05-01 12:58

"Christian Jørgensen" wrote:
>
> Jeg sidder og vrider mine små grå for at finde ud hvordan flg.
> kode skal tolkes:
>
> <?php
>
> $b1 = 1;
> $b2 = 2;
> $b3 = 3;
>
> $tal = $b1 << 24 | $b2 << 16 | $b3 << 8 | $b4;
>
> print $tal;
>
> ?>
>
> Outputtet er 16909056

x << y betyder: rotér bitrepræsentationen af x mod venstre y gange (x og
y er 32 bit tal)

x | y betyder: hvis den i'te bit i x og/eller den i'te bit i y er sat
(=1) så vil den i'te bit i tallet x | y også være sat.

Tænkt eksempel på 8 bit tal, hvilket ikke vil virke med php:
01001101 << 2 = 00110101
00001101 | 00001110 = 00001111


Dit udtryk skal grundet de gældende præcedensregler læses som
($b1 << 24) | ($b2 << 16) | ($b3 << 8) | $b4

$b4 initialiseres implict med talværdien 0.

--
Jonas Kongslund

Andreas Kleist Svend~ (05-05-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 05-05-01 13:14

ttao0nxes7rv001@sneakemail.com (Christian Jørgensen) wrote in
<Xns90987F5578672.l33t.razor@212.54.64.135>:

> Jeg sidder og vrider mine små grå for at finde ud hvordan flg.
> kode skal tolkes:

http://php.net/manual/en/language.operators.bitwise.php

> $tal = $b1 << 24 | $b2 << 16 | $b3 << 8 | $b4;

Operatoren << er stærkere end ditto | så følgende er det samme, men (måske)
mere overskueligt:

$tal = ($b1 << 24) | ($b2 << 16) | ($b3 << 8) | $b4;

1 << 24 betyder: 1 rykket 24 pladser til venstre. Altså:
1000000000000000000000000 som i decimaltal er 2^24 = 16777216

Tilsvarende er 2 << 16 = 2 * 2^16 = 131072
og endelig 3 << 8 = 768

> Outputtet er 16909056

Som sandelig er summen af ovenstående. (| svarer til + i dette eksempel
grundet forskydningen af de betydende cifre.)

--
mvh Andreas Kleist Svendsen
http://nau.dk

Søg
Reklame
Statistik
Spørgsmål : 177523
Tips : 31968
Nyheder : 719565
Indlæg : 6408675
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste