Skip to content

Commit

Permalink
spec: document signed integer shift counts
Browse files Browse the repository at this point in the history
Updates golang#19113.

Change-Id: I4726f51c5061c33979cdd061f6d4616fa97edb9a
Reviewed-on: https://go-review.googlesource.com/c/161201
Reviewed-by: Rob Pike <r@golang.org>
  • Loading branch information
griesemer committed Feb 17, 2019
1 parent 5aac0f0 commit a10b4cf
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions doc/go_spec.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!--{
"Title": "The Go Programming Language Specification",
"Subtitle": "Version of November 16, 2018",
"Subtitle": "Version of February 16, 2019",
"Path": "/ref/spec"
}-->

Expand Down Expand Up @@ -3439,7 +3439,7 @@ <h3 id="Operators">Operators</h3>
</p>

<p>
The right operand in a shift expression must have unsigned integer type
The right operand in a shift expression must have integer type
or be an untyped constant <a href="#Representability">representable</a> by a
value of type <code>uint</code>.
If the left operand of a non-constant shift expression is an untyped constant,
Expand Down Expand Up @@ -3586,7 +3586,9 @@ <h4 id="Integer_operators">Integer operators</h4>

<p>
The shift operators shift the left operand by the shift count specified by the
right operand. They implement arithmetic shifts if the left operand is a signed
right operand, which must be positive. If the shift count is negative at run time,
a <a href="#Run_time_panics">run-time panic</a> occurs.
The shift operators implement arithmetic shifts if the left operand is a signed
integer and logical shifts if it is an unsigned integer.
There is no upper limit on the shift count. Shifts behave
as if the left operand is shifted <code>n</code> times by 1 for a shift
Expand Down Expand Up @@ -5921,7 +5923,7 @@ <h3 id="Complex_numbers">Manipulating complex numbers</h3>
const b = complex(1.0, -1.4) // untyped complex constant 1 - 1.4i
x := float32(math.Cos(math.Pi/2)) // float32
var c64 = complex(5, -x) // complex64
var s uint = complex(1, 0) // untyped complex constant 1 + 0i can be converted to uint
var s int = complex(1, 0) // untyped complex constant 1 + 0i can be converted to int
_ = complex(1, 2&lt;&lt;s) // illegal: 2 assumes floating-point type, cannot shift
var rl = real(c64) // float32
var im = imag(a) // float64
Expand Down

0 comments on commit a10b4cf

Please sign in to comment.