Springen naar inhoud

80 bit getal manipuleren


  • Log in om te kunnen reageren

#1

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 10 mei 2009 - 18:36

Aan de hand van enkele regeltjes krijg ik telkens één bit van de 80. Ik zou achteraf deze serie moeten splitsen en mee verder werken. Iemand enig idee wat hiervoor de handigste methode is?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Schwartz

    Schwartz


  • >250 berichten
  • 691 berichten
  • Verbannen

Geplaatst op 10 mei 2009 - 22:29

Als je heel veel bitbewerkingen op 1 getal doet kan men het getal van 80 bits opsplitsen in een array van 80 elementen.
Als men dan het getal nodig heeft dan kan men deze array uitlezen naar bits.
Men kan een variabele opnemen die zegt dat er een bewerking is uitgevoerd, indien er geen bewerking is geweest dan behoeft men het array niet uit te lezen wat tijd scheelt.

Het een en ander is afhankelijk van frequenties.
Men kan ook bitberwerking arrays opbouwen die men kan toepassen.
Een computertaal is voor mensen, niet voor de computer.

#3

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 10 mei 2009 - 23:03

Alles hangt idd een beetje af van wat je er later mee wil gaan doen. Sowieso zal je ze in een array moeten bijhouden, maar ook hier hangt alles weer af van wat je wil bereiken. Wil je minimale geheugenbezetting dan zal je best in 32 bit ints gaan opslaan (of 64 als je een 64bit platform hebt), wil je maximale performantie dan maak je best een array van 80 elementen die elk 1 bit onthoudt. Natuurlijk kan je ook elke mogelijke tussenweg nemen (bv 10 elementen van elk 1 byte).

#4

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 11 mei 2009 - 16:30

Uit wat jullie zeggen lijkt mij de array met lengte 80 het beste.

Wil je minimale geheugenbezetting dan zal je best in 32 bit ints gaan opslaan (of 64 als je een 64bit platform hebt), wil je maximale performantie dan maak je best een array van 80 elementen die elk 1 bit onthoudt. Natuurlijk kan je ook elke mogelijke tussenweg nemen (bv 10 elementen van elk 1 byte).

Welke variabele type heeft één bit? (Een bool lijkt zou wel kunnen uiteraard)
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#5

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 11 mei 2009 - 16:47

Hoe is dat 80bit getal in beginsel opgeslagen, of "hoe krijg je het binnen"? En wat wil je er precies mee doen?
In theory, there's no difference between theory and practice. In practice, there is.

#6

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 11 mei 2009 - 17:36

Ik krijg het per bit binnen vanuit een functie. Ik moet het achteraf manipuleren om als hash key te kunnen gebruiken.
PS: ik heb nog geen code geschreven voor dat deel (gaat zeker gebeuren maar is in eerste instantie optioneel) maar wil op voorhand zo optimaal mogelijk werken aangezien dat deel de globale code zou moeten versnellen.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#7

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 11 mei 2009 - 18:11

Welke variabele type heeft één bit? (Een bool lijkt zou wel kunnen uiteraard)


Buiten een bool geen enkele, maar die bool zal zelden exact 1 bit innemen in je systeem, daarom dat ik ook zei dat 80 aparte bits bijhouden qua geheugengrootte zeker niet de beste optie is. Maar met de huidige grote geheugens (en als je niet teveel getallen binnenkrijgt) mag zoiets natuurlijk geen probleem meer zijn. Het hangt er allemaal van af wat je er wil mee gaan doen.

#8

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 11 mei 2009 - 18:25

Goed. Ik ga tegen dat ik aan dat deeltje kom eens proberen met die array. Dit lijkt mij het makkelijkste aangezien er achteraf delen van moeten worden verwerkt.

EDIT: 80 bit is achteraf gezien wat overschat maar dat maakt niet veel uit.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#9

virtlink

    virtlink


  • >100 berichten
  • 158 berichten
  • Ervaren gebruiker

Geplaatst op 25 juni 2009 - 19:02

wil je maximale performantie dan maak je best een array van 80 elementen die elk 1 bit onthoudt.

Het is waarschijnlijk niet sneller om een array van 80 elementen (booleans bijvoorbeeld) bij te houden, tenzij je steeds maar een bewerking doet op één enkele bit.

Bijvoorbeeld, als je bitsgewijze NOT wilt toepassen op een getal van 80 bits, dan kost dat twee operaties op een array van twee 64-bit getallen, drie operaties op een array van drie 32-bit getallen, enz, en 80 operaties op een array van 80 booleans. Idem voor AND, OR, XOR, en zelfs normaal optellen en aftrekken gaat sneller.

Wat voor operaties moet je/wil je toepassen op het 80 bit getal?

maar die bool zal zelden exact 1 bit innemen in je systeem,

In C# is een boolean een 32-bit getal.

Veranderd door virtlink, 25 juni 2009 - 19:04

"Niet gehinderd door enige kennis van zaken..."

#10

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 26 juni 2009 - 17:37

Ik heb uiteindelijk een BitArray gebruikt.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures