Ein einziges Bit zählen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Ein einziges Bit zählen

Beitrag von 7x7 »

Wow...immer wieder fantastisch, welche interessanten Lösungen kollektives Denken hervorbringt! Eure Vorschläge haben mir sehr weitergeholfen! :allright:

Apropos "kollektives Denken": In meiner Teenager-Zeit habe ich die "Perry Rhodan"-Geschichten (gibt es die überhaupt noch?) geradezu verschlungen. Da gab es ein Kollektiv-Wesen Namens "ES"...aber das würde jetzt hier zu weit führen! :mrgreen:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Ein einziges Bit zählen

Beitrag von mk-soft »

Hab ich irgendwo aus dem Internet übersetzt.

Nur 32bit. Wie das mit 64bit geht weis ich noch nicht.

Code: Alles auswählen

Procedure countBits(x)

  ; x = x - ((x >> 1) & 0x55555555)
  !mov eax, [p.v_x]
  !mov ecx, eax
  !shr ecx, 1
  !And ecx, 55555555h
  !sub eax, ecx
  ; x = (x & 0x33333333) + ((x >> 2) & 0x33333333)
  !mov ecx, eax
  !And eax, 33333333h
  !shr ecx, 2
  !And ecx, 33333333h
  !add ecx, eax
  ; x = x + (x >> 4)
  !mov eax, ecx
  !shr eax, 4
  !add eax, ecx
  ; x &= 0xF0F0F0F
  !And eax, 0F0F0F0Fh
  ; (x * 0x01010101) >> 24
  !imul eax, 01010101h
  !shr eax, 24
  ProcedureReturn
  
EndProcedure

a = $80000001
Debug countBits(a)
P.S.
Hier noch mal mit SSE4 popcnt

Code: Alles auswählen

Procedure countBits(x)
  
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
    !popcnt eax, [p.v_x]
  CompilerElse
    !popcnt rax, [p.v_x]
  CompilerEndIf
  
  ProcedureReturn
  
EndProcedure

a = $80000001
b = countBits(a)
Debug b
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Ein einziges Bit zählen

Beitrag von Sebastian »

Perry Rhodan wurde gerade wieder neu groß aufgelegt. Hat seinen "zweiten Frühling" durch die eReader erleben dürfen. Gab einen Stand auf der Leipziger Buchmesse. Ist mir dort ins Auge gestochen :)
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten