Avatar billede limemedia Nybegynder
25. marts 2004 - 20:58 Der er 5 kommentarer og
1 løsning

Initialisering af variabel og binære operationer

Er det muligt at skrive følgende i én linie ?
$compare = 0;
$compare += '0x'.dechex(1<<($bit-1));

Skriver jeg blot '0x'.dechex(1<<($bit-1)) hvor jeg ønsker at sammenligne, får jeg ikke korrekt resultat ?

Initialiserer += min variabel, eller skal jeg initialisere først ? (kan ikke teste lokalt, da jeg pt ikke kan køre min udviklingsmaskine med notices slået til)

Min eksempel kode
<?php
    function setbit($val, $bit) {
        if (readbit($val, $bit)) return $val;
        return $val += '0x'.dechex(1<<($bit-1));
    }
   
    function clearbit($val, $bit) {
        if (!readbit($val, $bit)) return $val;

        $compare = 0;
        $compare += '0x'.dechex(1<<($bit-1));
        return $val ^ $compare;
    }

    function readbit($val, $bit) {
        $compare = 0;
        $compare += '0x'.dechex(1<<($bit-1));
        return ($val&$compare)?'1':'0';
    }
?>

/ LJ
Avatar billede fangel Nybegynder
25. marts 2004 - 21:11 #1
+= initialsere ikke variablen først, nej... et bud ville være at skrive
$compare = 0 + '0x'.dechex(1<<($bit-1));
men jeg har ikke rodet med bitvise operationer... måske kan du endag udelade 0 +

og fy skamme at du ikke kører med error_reporting = E_ALL ;) ;) ;)

Morten
Avatar billede alvion Nybegynder
25. marts 2004 - 21:16 #2
Følgende kode
--------------------------
$bit = 1;

$c1 = 0;
$c1 += '0x'.dechex(1<<($bit-1));
print $c1;

$c2 += '0x'.dechex(1<<($bit-1));
print $c2;

$c3 += '0x'.dechex(1<<($bit-1));
print $c3;
--------------------------

Giver følgende resultat:
--------------------------
1
Notice: Undefined variable: c2 in C:\Inetpub\wwwroot\ljtest.php on line 8
1
Notice: Undefined variable: c3 in C:\Inetpub\wwwroot\ljtest.php on line 11
1
--------------------------
Uinitialiserede variable oprettes automatisk og sættes til "empty", hvilket i dit tilfælde type-konverteres til 0.
Avatar billede limemedia Nybegynder
25. marts 2004 - 21:17 #3
ahh, dét er jo klart :) man kan jo ikke se skoven for bare træer

<?php
    function setbit($val, $bit) {
        if (readbit($val, $bit)) return $val;
        return $val += '0x'.dechex(1<<($bit-1));
    }
   
    function clearbit($val, $bit) {
        if (!readbit($val, $bit)) return $val;
        return $val^(0+('0x'.dechex(1<<($bit-1))));
    }

    function readbit($val, $bit) {
        return ($val&(0+('0x'.dechex(1<<($bit-1)))))?'1':'0';
    }
?>

smid et svar, du fik mig den rigtige vej
Avatar billede limemedia Nybegynder
25. marts 2004 - 21:19 #4
når jeg ser på koden, minder den mig godtnok meget om de "lykkelige" perl dage *g*
Avatar billede fangel Nybegynder
25. marts 2004 - 21:24 #5
lars -> du skrammer mig ;) hæhæ...

Nu mangler jeg jo bare at lege med de bitvise operationer som du åbenbart er faldet for (fx din artikel) - for det må være smart når jeg ik har fanget konceptet endnu ;) men giv det et par måneder...

Morten
Avatar billede limemedia Nybegynder
25. marts 2004 - 21:27 #6
dea >> artiklen blev skrevet i første version for over to år siden - og egentlig publiceret herinde... Grunden til det oplives nu er, at teknikken er genial til en kalender jeg arbejder med pt. :)

Dér blev bedt om en ekstra artikel om selve operatorene, som jeg da også vil lancere. Det er jo ikke så sjovt at skrive artikler om dét som de fleste kan.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester