diff options
author | Robert Griesemer <gri@golang.org> | 2019-02-05 14:33:24 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2019-02-17 04:46:20 +0000 |
commit | a10b4cff91cb5d26e2049f6efc20349aa4d50d20 (patch) | |
tree | 32f6abb522e4ea16ee3f606eb8061eebb9dd8bb9 /doc/go_spec.html | |
parent | 5aac0f0d1edbeb03ffe1c189ec97d55c2a7c1e84 (diff) | |
download | go-a10b4cff91cb5d26e2049f6efc20349aa4d50d20.tar.gz go-a10b4cff91cb5d26e2049f6efc20349aa4d50d20.zip |
spec: document signed integer shift counts
Updates #19113.
Change-Id: I4726f51c5061c33979cdd061f6d4616fa97edb9a
Reviewed-on: https://go-review.googlesource.com/c/161201
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'doc/go_spec.html')
-rw-r--r-- | doc/go_spec.html | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/doc/go_spec.html b/doc/go_spec.html index dcc81ed628..f3d2320d86 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -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" }--> @@ -3439,7 +3439,7 @@ to the type of the other operand. </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, @@ -3586,7 +3586,9 @@ be replaced by a bitwise AND operation: <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 @@ -5921,7 +5923,7 @@ var a = complex(2, -2) // complex128 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<<s) // illegal: 2 assumes floating-point type, cannot shift var rl = real(c64) // float32 var im = imag(a) // float64 |