Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Programování - Práce s bity binárního čísla

Dobrý den,
chci napsat program (Delphi, C), který dokáže měnit bity proměnné typu celé číslo. Důvodem je nahrazení pole dvoustavových hodnot.

//Pseudo-program č.1:
var
   Hodnoty: PoleDvoustavovýchHodnot;
begin
   Hodnoty[TretiOdKonce] := true;
end;

//Pseudo-program č.2:
var
   Hodnoty: Cele32BitoveCislo;
begin
   Hodnoty[TretiNejnizsiBit] := true;
end;

Myslím si, že by druhý "program" proběhl rychleji. Pokud je můj názor chybný, tak mě prosím opravte. Proměnná první by vypadala {..., false, false, true, false, false}, druhou proměnnou by vyjadřovalo číslo 4 (desítkově). Podle mě by mělo být druhé provedení pro procesor přirozenější.
Děkuji, Telever

Předmět Autor Datum
V rychlosti by rozdíl nebyl, ale ten druhý by spotřebovával méně paměti.
Wikan 12.01.2013 19:52
Wikan
Ak sa jedna o hodnotu BOOLEAN jej reprezentacia je tusim 16bitova, tudiz co hodnota to 16 bitov, aj…
KiloViktor 12.01.2013 20:06
KiloViktor
Netuším o akej rýchlosti to meleleš: 0-2 ms ??? O čo Ti vlastne ide? Prečo a z akého dôvodu chceš r…
pme 12.01.2013 20:28
pme
Jde o prohledávání neorientovaného grafu. Něco ve smyslu: "Je dána šachovnice 15x15 políček. Najdi v…
Telever 12.01.2013 20:41
Telever
Pokud nemáš zásadní problémy s množstvím použité paměti, tak úplně stačí když budeš pracovat s byty… poslední
Wikan 12.01.2013 20:45
Wikan

Ak sa jedna o hodnotu BOOLEAN jej reprezentacia je tusim 16bitova, tudiz co hodnota to 16 bitov, aj ked zbylych 15 bitov je nevyuzitych.

Ak chces napratat viac hodnot do 32 bitovej premennej je nutne to robit matematikou.
Napriklad :

unsigned long status = 48; // 48 = 0000 0000 0011 0000 (32 bitova hodnota)

// Nulovanie bitu pomocou jednickoveho doplnku (tilda) a bitoveho operatoru AND
// Nuluje 4-ty bit v premennej status
status &= ~16;

// Nastavenie 3-tieho bitu v premennej status do jednotky
status |= 8;

// Testovanie 3-tieho bitu
if (status & 8)
printf ("3-ti bit premennej status po nastaveni = log 1, status = %d\n", status);
else
printf ("3-ti bit premennej status po nastaveni = log 0, status = %d\n", status);

Netuším o akej rýchlosti to meleleš: 0-2 ms ???

O čo Ti vlastne ide? Prečo a z akého dôvodu chceš robiť niečo "pro procesor přirozenější."
V DELPHI sa o všetko postará prekladač a optimalizuje Tvoj kód.

Vážne som nepochopil či chceš nastavovať stavy: true/false, alebo 0/1...

Pozri sa na typ TBits (unit Classes):

var
  flags : TBits;        
begin
  flags := TBits.Create;
  flags.Size := 5;
  flags[0] := true;
  flags[1] := true;
  flags[4] := true;
...

Jde o prohledávání neorientovaného grafu. Něco ve smyslu: "Je dána šachovnice 15x15 políček. Najdi všechny cesty, kterými je možné se dostat z levého horního rohu do pravého dolního." Snažím se pracovat s co nejjednoduššími typy. Jsem však začátečník a budu rád za každý názor.

Zpět do poradny Odpovědět na původní otázku Nahoru