On 2020-01-18 06:09, Tobias Boege wrote:
On Fri, 17 Jan 2020, ToddAndMargo via perl6-users wrote:
Hi All,

https://docs.raku.org/routine/+$CIRCUMFLEX_ACCENT

(Operators) infix +^ยง

multi sub infix:<+^>($a, $b --> Int:D)

Integer bitwise XOR operator: Coerces both arguments to Int and does a
bitwise XOR (exclusive OR) operation.


$ p6 'my uint8 $x=0b0101_0111; my uint8 $y = 0b0000_1111; my uint8 $z =
+^($x, $y ); say "0", $x.base(2); say "0000", $y.base(2); say $z.base(2);'

01010111
00001111
11111101


XOR
A  B   A xor B
0  0      0
1  0      1
0  1      1
1  1      0

That s not what I am seeing above.

What am I doing wrong this time?

And who set the high bit making $z negative?


As was already mentioned, if you want to use the &infix:<+^> operator,
you have to either call it by its full name as a sub:

   &infix:<+^>($x, $y)

or you have to use it according to its syntax category, as an infix:

   $x +^ $y

When you write +^($x,$y), its cousin &prefix:<+^> is called instead,
because now you use +^ as a prefix operator. That one performs bitwise
negation on its argument coerced to Int, and since you pass it a list
of length two, you actually evaluate +^2. And that's how you get the
high bit and a value of -3.

Regards,
Tobias


Hi Tobias,

This works perfectly using the syntax $a = $b +^ $c

p6 'my uint8 $x=0b0101_0111; my uint8 $y = 0b0000_1111; my uint8 $z = $x +^ $y; say "0", $x.base(2); say "0000", $y.base(2); say "0",$z.base(2);'

01010111    # $x
00001111    # $y
01011000    # z = x xor y


But what is now confusing me is $c = +^( $a, $b )

p6 'my uint8 $x=0b0101_0111; my uint8 $y = 0b0000_1111; my uint8 $z = +^($x, $y); say "0", $x.base(2); say "0000", $y.base(2); say $z.base(2);'

01010111    # $x
00001111    # $y
11111101    # z is not  x xor y

Which is clearly not correct.  The manual states:

      Integer bitwise XOR operator: Coerces both
      arguments to Int and does a bitwise XOR
      (exclusive OR) operation.

In my example run line, I purposefully left the
high bit off to keep overly helpful Raku from thinking
I had a negative number when it annoyingly overrules
my choice of native type.  (Ordinarily I like this
feature, except when doing bitwise operations, I
wish I could turn it off.)

So I am confused.

-T

Reply via email to