是否可以使用 ++ 运算符递增长文本,并访问 Java 中的整个长文本范围?

我正在写一个临时的小私人“区块链”,用于说明目的,用作教学工具。我已经解决了所有的核心功能,但我正在考虑区块链的一些更奇特的方面,并发现自己想知道Java中的多头。我在应用程序中内置的“矿工”方法使用 ++运算符递增一个 long 类型的随机数值,直到满足条件。我的问题是,如果我想避免(或至少大大延长)耗尽整数随机数空间(2147483647)的机会,如果我初始化起始随机数值,我将传递给Nonce = 0L的miner方法;我可以使用 ++运算符递增它并利用完整的长文本范围吗?

我的理解是,比特币在交易中使用了特殊的输入值,并且/或者一些矿工会稍微改变“ExtraNonce”的时间戳,但由于这只是为了说明目的,我不想在应用程序中包含类似的东西。

如果有人出于任何原因想看到它们,我可以提供代码片段,任何想法将不胜感激!

代码如下:

(请不要在我可疑的if/else控制逻辑上嘲笑我,这不是一个合法的生产应用程序,我仍然是java的新手)

这是来自调用矿工方法的启动器类的代码:


 } else if (cliInput.contentEquals("mine")) {

                Scanner howMany = new Scanner(System.in);

                System.out.println("\n");

                System.out.println("Enter number of blocks to mine: \n");

                int howManyBlocks = howMany.nextInt();

                int numBlocksMined = 0;

                while (howManyBlocks >= numBlocksMined) {

                    MainChain mc = new MainChain();

                    long indexValue = (HashArray.hashArray.size() / 8);

                    long timeStamp = mc.getUnixTimestamp();

                    String data = helpers.SHA256.generateHash(pubKey + addressKey);

                    String previousHash = mc.getPreviousBlockHash();

                    ChainBuilder cb = new ChainBuilder();

                    cb.miner(indexValue, timeStamp, data, 0, previousHash, 5);

                    numBlocksMined++;

                }

以下是矿工方法的核心:


public void miner(long index, long currentTimeMillis, String data, long Nonce, String previousBlockHash, int difficulty) throws InterruptedException {

        this.index = index;

        this.currentTimeMillis = currentTimeMillis;

        this.pszTimeStamp = pszTimeStamp;

        this.Nonce = Nonce;

        this.previousBlockHash = previousBlockHash;

        this.difficulty = difficulty;

        this.data = data;

        boolean iterator = true;


我想知道的是,如果我将0L而不是0传递给矿工方法,我是否可以访问整个范围?

慕后森
浏览 75回答 2
2回答

郎朗坤

运算符按预期方式处理变量。++long

心有法竹

是的,对于长 ++,将使用指令集( 对于 int)。laddiadd参见 6.5 指令由于您的问题随着您的编辑而完全改变,我仍然看到它。cb.miner(indexValue, timeStamp, data, 0, previousHash, 5);如果你传递类似的东西,它将被视为 一个,所以你可以只放在那里,尽管方法参数接受 a(它将在方法体中这样处理)。0intMAX_INTEGERlong
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java