gpt4 book ai didi

java - 您可以使用++ 运算符递增长文字并访问 java 中的整个长文字范围吗?

转载 作者:行者123 更新时间:2023-12-01 19:40:23 26 4
gpt4 key购买 nike

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

据我所知,比特币在交易中使用特殊的输入值,和/或一些矿工会稍微改变“ExtraNonce”的时间戳,但由于这只是为了说明目的,我不想走得太远在应用程序中包含类似的内容。

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

代码如下:

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

这是启动器类中调用 miner 方法的代码:

 } 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;

String blockHeader = (index + currentTimeMillis + data + Nonce + previousBlockHash + difficulty);
String hash = SHA256.generateHash(blockHeader);

startTime = System.nanoTime();
TimeUnit.SECONDS.sleep(1);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("\n");
System.out.println("Current hash rate: " + hashRate + " " + "hash/s");
}
}, 0, 3000);

while (iterator) {
blockHeader = (index + currentTimeMillis + data + Nonce + previousBlockHash + difficulty);
hash = SHA256.generateHash(blockHeader);
if (difficulty == 1) {

if (!hash.startsWith("0")) {
Nonce++;
endTime = System.nanoTime();
deltaN = endTime - startTime;
deltaS = (deltaN / 1000000000);
hashRate = (Nonce / deltaS);

} else {
System.out.println("Hash found!");
System.out.println("[" + hash + "]");
...............

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

所以代替:

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

我可以像这样传递它以利用整个长文字范围吗?

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

最佳答案

++ 运算符在 long 变量上按预期工作。

关于java - 您可以使用++ 运算符递增长文字并访问 java 中的整个长文字范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55554253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com