Bitforgatás Visual Basic 6
2010-11-02T22:39:01+01:00
2010-11-03T08:16:32+01:00
2022-07-04T11:56:53+02:00
  • Mi lenne, ha átírnád 2-es számrenszerbe stringnek, és máris első/utolsó karakterek.
    Ha 5-öt kell léptetni balra, akkor első 5 levágás, végére illesztés
    ---

    De ha már a kód rövidségét (és sebességét) nézegetjük, akkor pl.

    If Num And 2 ^ i Then Bits(i) = True Else Bits(i) = False End If ' helyett Bits(i)=Num And 2 ^ i
    Mutasd a teljes hozzászólást!
  • latom te egy okostoni vagy =)
    Mutasd a teljes hozzászólást!
  • Mióta a forráskód hossza a forráskód hatékonyságának fokmérője?

    Ne fikazd a kodomat mostmar :D
    Irjal jobbat!


    Már a belinkelt kód is hatékonyabb a tiednél, ha tovább optimalizáljuk, akkor még hatékonyabb lesz.
    Mutasd a teljes hozzászólást!
  • huu, ha letoltod a teljes forrast onnan amit az elobb linkeltel

    http://www.bitwisemag.com/2/IMG/zip/vb_bitshift.zip

    es kikeresed benne a Rotate32 Sub-ot, es nem csak azt a kimasolt 10 soros kodreszletet nezed a weblapon, ami raadasul csak az eltolast mutatja be, fogod latni hogy bizony joval hosszabb a kodja az en verziomnal.

    es en meg ki sem toroltem az enyembol az ures sorokat =)

    mellesleg 3x-szor van bejarva es nem 5-szor.

    1. egyszer amikor atalakitom boolean tombbe
    2. elvegzem a tenyleges forgatast a boolean tombon
    3. vissza alakitom a tombot egésszé

    es igen, ismerem a bitmaszkolast is, szerinted ez micsoda, rogton a fuggvenyem elejen? :

    If Num And &H80000000 Then Bits(31) = True End If

    A boolean tomb pedig mukodik 1024 bitre is :P

    Ne fikazd a kodomat mostmar :D
    Irjal jobbat!
    Mutasd a teljes hozzászólást!
  • Mert a túlcsordulás előre nem látható, igaz? A felső/alsó bitek nem maszkolhatóak, igaz?

    Nézd meg mondjuk ezt a kódot! Még ez sem a legoptimálisabb, de még midig jobb, mint egy boolean tömbön vagy 5x végiglépkedni...
    Mutasd a teljes hozzászólást!
  • egy baj van a szorzassal/tologatassal: VB-ben nincs unsigned tipus, minden szam elojeles. megszorzol kettovel egy kelloen nagy szamot - atvalt negativ elojelre - es tulcsordulassal leall vagy isten a megmondoja hogy milyen eredmeny jon ki =)

    a forgatas amit elobb bemasoltam egyenerteku ezzel a muvelettel, C- syntaxis:

    x << r | x >> (32 - r) ismerem, nem vagyok en fejre ejtve :P

    de ugyanigy ugyanez nem megy VB-ben az elojelek + tulcsordulas miatt =)
    Mutasd a teljes hozzászólást!
  • Jaj. Azért én ezzel nem büszkélkednék...

    Arra nem gondoltál, hogy a balra tolás az 2-vel való szorzás, a jobbra tolás meg 2-vel való egész osztás és hogy ezekre vannak a VB6-ban is operátorok?
    Mutasd a teljes hozzászólást!
  • Eleg sok idot toltottem el vele hogy mukodjon es egyszeru is legyen, ezert most megosztom xD

    Az alabbi fuggveny egy 32 bites DWORD-ot forgat balra bitenkent a megadott lepesszammal.

    Peldaul a Rol32(&H12345678, 4) a 23456781 hex szamot
    eredmenyezi :D

    Akinek majd ellenkezo iranyban torteno forgatasra is ( na meg byte, word tipus) szuksege lesz, ez itt egy kis kiindulo =)

    Private Function Rol32(Num As Long, ByVal R As Byte) As Long Dim Bits(32) As Boolean Dim Maps(32) As Boolean R = R And 31 If Num And &H80000000 Then Bits(31) = True End If For i = 0 To 30 If Num And 2 ^ i Then Bits(i) = True Else Bits(i) = False End If Next For i = 0 To 31 If R > i Then Maps(R - i - 1) = Bits(31 - i) Else Maps(i) = Bits(i - R) End If Next Rol32 = 0 For i = 0 To 30 If Maps(i) Then Rol32 = Rol32 + 2 ^ i End If Next If Maps(i) Then Rol32 = Rol32 Or &H80000000 End If End Function
    Mutasd a teljes hozzászólást!
abcd