Hi All,

My keeper on bitwise operations:

-T



Perl: bitwise operators:

alias p5='perl6 -E'
alias p6='perl6 -e'


Shift Left and OR:
    $ p6 'my Buf $x=Buf.new(0xAE,0x5D,0x5C,0x72);
my int32 $i=$x[3] +< 0x18 +| $x[2] +< 0x10 +| $x[1] +< 0x08 +| $x[0];
          say $x; say $i.base(0x10);'

          Buf:0x<AE 5D 5C 72>
          725C5DAE


Bitwise += / ~=:  Put and "=" after the bitwise operator:

$ p6 'my int32 $i=0x00005DAE; say $i.base(0x10); $i +<= 0x01; say $i.base(0x10);'
    5DAE
    BB5C

    $ p6 'my $v = 0b00100000; $v +|= 0b00010001; say $v;'
    49

    $ p6 'my $v = 0b00100000; $v +|= 0b00010000; say $v;'
    48


Bitwise AND:
    $ p6 'my $v = 32 +& 16; say $v;'
    0

    $ p5 'my $v = 32 & 16; say $v;'
    0


Bitwise OR (note +|= example):
    $ p5 'my $v = 32 | 16; say $v;'
    48

    $ p6 'my $v = 32 +| 16; say $v;'
    48

    $ p6 'my $v = 0b00100000; $v +|= 0b00010001; say $v;'
    49

    $ p6 'my $v = 0b00100000; $v +|= 0b00010000; say $v;'
    48


Bitwise shift left:
    $ p6 'my $v = 0b00000100 +< 2; say $v;'
    16

    $ p5 'my $v = 0b00000100 << 3; say $v;'
    32



Bitwise shift right:
    $ p5 'my $v = 0b00010100 >> 3; say $v;'
    32

    $ p6 'my $v = 0b00110100 +> 3; say $v;'
    6


Bitwise XOR:
    $ p6 'my $v = 0b00101101 ^ 0b00001001; say $v;'
    36

    $ p6 'my $v = 0b00001101 +^ 0b00001001; say $v;'
    4

$ p6 'my uint8 $x = infix:<+^>( 0b1000_1010, 0b1010_0110 ); say "00", $x.base(2);'
    00101100



Bitwise NOT (Ones Complement or flip the bits):
$ p6 'my uint8 $x=0b1010_0110; my uint8 $y = +^$x; my uint8 $z = $y + 1;
          say $x.base(2); say "0", $y.base(2); say "0", $z.base(2);'
    10100110  # original
    01011001  # one's complement
    01011010  # two's complement

   $ p6 'my uint8 $x= 0b1000_1010 +^ 0b1010_0110; say "00", $x.base(2);'
   00101100



Bitwise "IN" or Pattern Test (Does y exist in x):
$ p5 'my $x = 0b1001; my $y = 0b1000; say qw(false true)[($x & $y) == $y]'
    true

$ p5 'my $x = 0b1001; my $y = 0b0100; say qw(false true)[($x & $y) == $y]'
    false

    $ p6 'my $x=0b1001; my $y=0b0101; my $z=$x +& $y; say so $y == $z;'
    False

    $ p6 'my $x=0b1001; my $y=0b1001; my $z=$x +& $y; say so $y == $z;'
    True

Reply via email to