
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!

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)
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