Author: lwall
Date: 2010-02-05 19:39:57 +0100 (Fri, 05 Feb 2010)
New Revision: 29645

Modified:
   docs/Perl6/Spec/S03-operators.pod
Log:
[S03] be more specific about bitwise semantics


Modified: docs/Perl6/Spec/S03-operators.pod
===================================================================
--- docs/Perl6/Spec/S03-operators.pod   2010-02-05 16:17:23 UTC (rev 29644)
+++ docs/Perl6/Spec/S03-operators.pod   2010-02-05 18:39:57 UTC (rev 29645)
@@ -15,8 +15,8 @@
 
     Created: 8 Mar 2004
 
-    Last Modified: 1 Feb 2010
-    Version: 189
+    Last Modified: 5 Feb 2010
+    Version: 190
 
 =head1 Overview
 
@@ -654,19 +654,27 @@
 
     +^$x
 
-Coerces to integer and then does bitwise negation (complement) on the number.
+Coerces to C<Int> and then does bitwise negation on the number, returning an 
C<Int>.
+(In order not to have to represent an infinitude of 1's, represents
+that value as some negative in 2's complement form.)
 
 =item *
 
 C<< prefix:<~^> >>, string bitwise negation
 
     ~^$x
-Coerces to string buffer and then does bitwise negation (complement)
-on each element.
 
+Coerces NFG strings to non-variable-encoding string buffer type (such as Buf8,
+Buf16, or Buf32) and then does negation (complement) on each
+bit of each integer element, returning a buffer of the same size as the input.
+
+The use of coercion probably indicates a design error, however.  This operator
+is distinguished from numeric bitwise negation in order to provide bit vectors
+that extend on the right rather than the left (and always do unsigned 
extension).
+
 =item *
 
-C<< prefix:<?^> >>, boolean bitwise negation
+C<< prefix:<?^> >>, boolean negation
 
     ?^$x
 
@@ -776,7 +784,8 @@
 
     $x +& $y
 
-Converts both arguments to integer and does a bitwise numeric AND.
+Converts both arguments to C<Int> and does a boolean AND between
+corresponding bits of each integer, returning an C<Int> result.
 
 =item *
 
@@ -799,6 +808,16 @@
 
     $x ~& $y
 
+Coerces NFG strings to non-variable-encoding string buffer type (such as Buf8,
+Buf16, or Buf32) and then does numeric bitwise AND on corresponding integers
+of the two buffers, logically padding the shorter buffer with 0 values.
+returning a buffer sufficiently large to contain all non-zero integer results
+(which for AND is at most the size of the shorter of the two buffers).
+
+The use of coercion probably indicates a design error, however.  This operator
+is distinguished from numeric bitwise AND in order to provide bit vectors
+that extend on the right rather than the left (and always do unsigned 
extension).
+
 =item *
 
 C<< infix:{'~<'} >>, buffer bitwise shift left
@@ -816,10 +835,13 @@
 
 =item *
 
-C<< infix:<?&> >>, boolean bitwise and
+C<< infix:<?&> >>, boolean and
 
     $x ?& $y
 
+Converts both arguments to type C<Bool> and then ANDs those, returning the
+resulting C<Bool>.
+
 =back
 
 Any bit shift operator may be turned into a rotate operator with the
@@ -858,36 +880,68 @@
 
     $x +| $y
 
+Converts both arguments to C<Int> and does a boolean OR between
+corresponding bits of each integer, returning an C<Int> result.
+
 =item *
 
 C<< infix:<+^> >> numeric bitwise exclusive or
 
     $x +^ $y
 
+Converts both arguments to C<Int> and does a boolean XOR between
+corresponding bits of each integer, returning an C<Int> result.
+
 =item *
 
 C<< infix:<~|> >>, buffer bitwise inclusive or
 
     $x ~| $y
 
+Coerces NFG strings to non-variable-encoding string buffer type (such as Buf8,
+Buf16, or Buf32) and then does numeric bitwise OR on corresponding integers
+of the two buffers, logically padding the shorter buffer with 0 values.
+returning a buffer sufficiently large to contain all non-zero integer results
+(which for OR is at most the size of the longer of the two buffers).
+
+The use of coercion probably indicates a design error, however.  This operator
+is distinguished from numeric bitwise OR in order to provide bit vectors
+that extend on the right rather than the left (and always do unsigned 
extension).
+
 =item *
 
 C<< infix:<~^> >> buffer bitwise exclusive or
 
     $x ~^ $y
 
+Coerces NFG strings to non-variable-encoding string buffer type (such as Buf8,
+Buf16, or Buf32) and then does numeric bitwise XOR on corresponding integers
+of the two buffers, logically padding the shorter buffer with 0 values.
+returning a buffer sufficiently large to contain all non-zero integer results
+(which for XOR is at most the size of the longer of the two buffers).
+
+The use of coercion probably indicates a design error, however.  This operator
+is distinguished from numeric bitwise XOR in order to provide bit vectors
+that extend on the right rather than the left (and always do unsigned 
extension).
+
 =item *
 
-C<< infix:<?|> >>, boolean bitwise inclusive or
+C<< infix:<?|> >>, boolean inclusive or
 
     $x ?| $y
 
+Converts both arguments to type C<Bool> and then ORs those, returning the
+resulting C<Bool>.
+
 =item *
 
-C<< infix:<?^> >> boolean bitwise exclusive or
+C<< infix:<?^> >> boolean exclusive or
 
     $x ?^ $y
 
+Converts both arguments to type C<Bool> and then XORs those, returning the
+resulting C<Bool>.
+
 =back
 
 =head2 Replication

Reply via email to