This is an example of a bit vector (a vector of "0"s or "1"s)
## Define a bit vector with positions 4 to 7 set to 1 my $bv1=''; vec($bv1,$_,1)=1 foreach (3..6); dumpbv($bv1); sub dumpbv { my $bitv = shift @_; my $pos=0; foreach (split "",unpack("b*",$bitv)){ print; $pos++; } }
With bit vectors you can do bit operations. for example, to find the overlapping ("OR") of 2 bit vectors:
sub sumbv { return $_[0] | $_[1]; }
... and the AND operation:
sub cmpbv { return $_[0] & $_[1]; }
A full working dummy example with these functions would be:
use strict; use warnings; ## Define a bit vector with positions 4 to 7 set to 1 my $bv1=''; vec($bv1,$_,1)=1 foreach (3..6); dumpbv ($bv1); print " bv1\n"; # Define a bit vector with positions 3 to 5 set to 1 my $bv2=''; vec($bv2,$_,1)=1 foreach (2..4); dumpbv ($bv2); print " bv2\n"; print "--------\n"; my $bv_sum = sumbv($bv1,$bv2); dumpbv ($bv_sum);print " OR\n"; my $bv_cmp = cmpbv($bv1,$bv2); dumpbv ($bv_cmp);print " AND\n"; sub sumbv { return $_[0] | $_[1]; } sub cmpbv { return $_[0] & $_[1]; } sub dumpbv { my $bitv = shift @_; my $pos=0; foreach (split "",unpack("b*",$bitv)){ print; $pos++; } }
Outputs:
00011110 bv1 00111000 bv2 -------- 00111110 OR 00011000 AND
Hope this helps
citromatik
In reply to Re: oct and vec
by citromatik
in thread oct and vec
by pysome
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |