my $x = 0xFF; # 0x18 == 24, the max value of both bits # 4-3 set printf("%b\n", &= ~0x18); __END__ 11100111 #### $x |= 0x14; # 20; __END__ 11110111 #### sub queue { my ($self, $q) = @_; if (defined $q){ if (! exists $queue{$q}){ die "queue param requires a binary string.\n"; } $self->{queue} = $queue{$q}; } $self->{queue} = DEFAULT_QUEUE if ! defined $self->{queue}; my $bits = $self->bits; # unset $bits &= ~MAX_QUEUE; # set $bits |= $self->{queue}; my $lsb = $bits & 0xFF; my $msb = $bits >> 8; $self->register($msb, $lsb); return $self->{queue}; }