in reply to Turning very larger numbers into an array of bits
A better way using vec in 8-bit chunks to store the modulo of the number and 256. This places the least significant bit first as you required.
use strict; use warnings; use feature qw{ say }; my $val = 107865; # Pre-size the vector for 80 bits. # my $vec; vec( $vec, 79, 1 ) = 0; my $offset = 0; while ( $val >= 256 ) { my $rem = $val % 256; vec( $vec, $offset ++, 8 ) = $rem; $val /= 256; } vec( $vec, $offset, 8 ) = $val; say unpack q{b*}, $vec; say qq{Bit $_: }, vec( $vec, $_, 1 ) ? q{set} : q{not set} for 0 .. 79;
The output.
1001101010100101100000000000000000000000000000000000000000000000000000 +0000000000 Bit 0: set Bit 1: not set Bit 2: not set Bit 3: set Bit 4: set Bit 5: not set Bit 6: set Bit 7: not set Bit 8: set Bit 9: not set Bit 10: set Bit 11: not set Bit 12: not set Bit 13: set Bit 14: not set Bit 15: set Bit 16: set Bit 17: not set Bit 18: not set Bit 19: not set Bit 20: not set Bit 21: not set Bit 22: not set Bit 23: not set Bit 24: not set Bit 25: not set Bit 26: not set Bit 27: not set Bit 28: not set Bit 29: not set Bit 30: not set Bit 31: not set Bit 32: not set Bit 33: not set Bit 34: not set Bit 35: not set Bit 36: not set Bit 37: not set Bit 38: not set Bit 39: not set Bit 40: not set Bit 41: not set Bit 42: not set Bit 43: not set Bit 44: not set Bit 45: not set Bit 46: not set Bit 47: not set Bit 48: not set Bit 49: not set Bit 50: not set Bit 51: not set Bit 52: not set Bit 53: not set Bit 54: not set Bit 55: not set Bit 56: not set Bit 57: not set Bit 58: not set Bit 59: not set Bit 60: not set Bit 61: not set Bit 62: not set Bit 63: not set Bit 64: not set Bit 65: not set Bit 66: not set Bit 67: not set Bit 68: not set Bit 69: not set Bit 70: not set Bit 71: not set Bit 72: not set Bit 73: not set Bit 74: not set Bit 75: not set Bit 76: not set Bit 77: not set Bit 78: not set Bit 79: not set
I hope this solution better fits your requirements.
Update: The condition in the while was incorrect, changed from $val > 256 to $val >= 256 to rectify invalid results for values exactly divisible by 256 to the n.
Cheers,
JohnGG
|
|---|