summaryrefslogtreecommitdiff
path: root/libgo/go/strconv/decimal.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/strconv/decimal.go')
-rw-r--r--libgo/go/strconv/decimal.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/libgo/go/strconv/decimal.go b/libgo/go/strconv/decimal.go
index 5252d6e86e..957acd9891 100644
--- a/libgo/go/strconv/decimal.go
+++ b/libgo/go/strconv/decimal.go
@@ -131,11 +131,13 @@ func rightShift(a *decimal, k uint) {
}
a.dp -= r - 1
+ var mask uint = (1 << k) - 1
+
// Pick up a digit, put down a digit.
for ; r < a.nd; r++ {
c := uint(a.d[r])
dig := n >> k
- n -= dig << k
+ n &= mask
a.d[w] = byte(dig + '0')
w++
n = n*10 + c - '0'
@@ -144,7 +146,7 @@ func rightShift(a *decimal, k uint) {
// Put down extra digits.
for n > 0 {
dig := n >> k
- n -= dig << k
+ n &= mask
if w < len(a.d) {
a.d[w] = byte(dig + '0')
w++