猿问

当我不编制索引时,如何获得“索引超出范围”

长期程序员 - 完全新手。


这是代码。这是我第一次尝试发电机。我正在尝试生成一个 lfsr 序列。本质上,每次你都向右移动一个。如果您只是移出1一点,则与该tap值异或。


package main


import (

    "fmt"

    "math/big"

)


// lfsr returns an lfsr generator.

func lfsr(tap, start big.Int) func() big.Int {

    // Keep track of next.

    next := &start

    // The generator.

    return func() big.Int {

        // Remember where we are.

        ret := *next

        // Work out next.

        fmt.Println("next", next.String(), "bit(0)", next.Bit(0))

        // Is it currently odd?

        odd := next.Bit(0)

        // Shift right one.

        next = next.Rsh(next, 1)


        // If odd - tap!

        if odd != 0 {

            // Tap!

            next = next.Xor(next, &tap)

            fmt.Printf("Tap!", next.String())

        }


        // Return where we were.

        return ret

    }

}


func main() {

    ten := new(big.Int)

    ten.SetString("10", 32)

    f := lfsr(*ten, *ten)

    for i := 0; i < 10; i++ {

        n := f()

        fmt.Println("lfsr ", n.String())

    }

}

我得到的打印输出是:


next 32 bit(0) 0

lfsr  16

next 16 bit(0) 0

lfsr  8

next 8 bit(0) 0

lfsr  4

next 4 bit(0) 0

lfsr  2

next 2 bit(0) 0

lfsr  1

next 1 bit(0) 1

Tap! 0

panic: runtime error: index out of range

我做错了什么 - 为什么它看起来是对的?


播放- 有趣的是 - 它输出:


...

next 1 bit(0) 1

Tap!%!(EXTRA string=0)panic: runtime error: index out of range


goroutine 1 [running]:

math/big.nat.string(0xc010045150, 0x1, 0x5, 0x12b23d0, 0xa, ...)

    go/src/pkg/math/big/nat.go:819 +0x67f

math/big.nat.decimalString(0xc010045150, 0x1, 0x5, 0x1, 0x1, ...)

    go/src/pkg/math/big/nat.go:731 +0x8f

math/big.(*Int).String(0x7f851e0eff40, 0xc010045150, 0x1)

    go/src/pkg/math/big/int.go:331 +0xfe

main.main()

    /tmpfs/gosandbox-94dce1ec_430947f1_6360662e_01c3d6ad_a7071d20/prog.go:41 +0x120

这是a)略有不同,b)表明这fmt.Println("lfsr ", n.String())是失败的原因,但我并没有更接近于找出原因。


添加


经过实验(更改ten.SetString("10", 32)为ten.SetString("10", 10)),我现在得到:


lfsr  5

next 5 bit(0) 1

Tap!%!(EXTRA string=0)panic: runtime error: index out of range

现在去睡觉 - 希望有人能帮忙。


慕桂英4014372
浏览 174回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答