| Bill Allombert on Fri, 04 Jul 2025 10:06:29 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: flags in a bitmap |
On Thu, Jul 03, 2025 at 06:06:14PM +0200, Ruud H.G. van Tol wrote: > > Bill, many thanks for the pointers, I'll explore. > > > As an alternative, maybe add a Vecbits() or Vecflags() or such. > No idea if the first bit should have offset 0 or 1. > Only with bittest(), maybe 0? > > my(B=Vecbits([0], 987654321)); > Vecbits_put(~B, 7654, v=1); \\set the bit at offset 7654, by default to 1 > Vecbits_put(~B, 7654, [1,0,0,1,1]); \\set bits 7654..7658 to [1,0,0,1,1] > my(b=Vecbits_get(B,7654)); \\get bit-7654 > my(b=bittest(B,7653)); \\... What I can do is to allow to set/clean a bit in place inside an integer. However this would only work if the integer is large enough. I can do a git branch if you want to test: ? install(bitset,vWL) ? x=2^(2^20); ? forprime(p=2,2^20,bitset(~x,p)) *** last result computed in 8 ms. ? my(S=0);for(i=0,2^20-1,S+=bittest(x,i));S %16 = 82025 *** last result computed in 159 ms. Cheers, Bill.