webForumDet fria alternativet

Bitprogrammering - behöver ett bollplank!

1 svar · 228 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Jag har ett tal $alts för vilket gäller:

  1. $alts innehåller totalt 4 bitar, alltså 0 < $alts < 15 (< , ej <= se nedan)
  2. Bitmönstret för $alts innehåller 2 eller 3 ettor. Alltså kan $alts inte vara lika med 0, 1, 2, 4, 8 eller 15.

Jag har ett annat tal, $comp, som innehåller "komplementet" till $alts,
framtaget genom 15 ^ $alts (XOR).

Jag har ett tredje tal, $test där jag vill kunna komma fram till följande:

  1. Om $test har någon bit gemensam med $comp:
    Det borde inte vara något problem:
    if ($test & $comp) //funkar väl?

2 a) I så fall om $test har exakt en bit gemensam med $alts om $alts har två satta bitar, och i så fall vilken.

2 b) om $alts har 3 satta bitar, så ska det gälla om $test har en eller två av de bitarna satta, vill fortfarande veta vilka bitar det gäller.

Gemensamt för 2) är alltså att $test har en äkta delmängd av de satta bitarna i $alts.

Hur i hecklefjäll skriver man det??? Tacksam för hjälp för nu står det bara fullkomligt still högst upp... :x

Jag tänkte först lägga detta i
webForum > OS & Programrelaterade forum > Programmering > Programmering - Övrigt, men sen tänkte jag att svaret kanske var beroende på språk, så därför ligger det här... Om det var fel, så ber jag om ursäkt!

aasahMedlem sedan mars 20034 471 inlägg
#2

Löste problemet, dock något förenklat, men det räcker för mig.

Bollplank är bra, då tvingas man tänka igenom problemet själv för att kunna förklara för andra... bara det löser många problem... ;)

Lösningen:

         if (($test & $alts) && // Någon bit gemensam
             (($test & $alts) != $alts)) { // Ej lika
            $junk = $test & $comp;
            if ($junk) { //Möjligen onödig koll?
               $rest = $test - $junk;
               //do what I want
            }
         }

Kan troligen skrivas enklare ändå...

131 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)