-4

static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);

那句话充满了各种魔力。它到底在做什么?

4

3 回答 3

4

假设 uint256 是一个 256 位无符号整数类型,并且运算符被定义为内置类型,这将:

  • 用 0 初始化一个 256 位无符号整数
  • 按位反转它(运算符〜)
  • 将其右移 32 位(运算符 >>)

请参阅有关 C/C++ 运算符的 Wikipedia

于 2013-11-13T17:15:11.500 回答
4

>> 在 C++ 代码中是什么意思?

对于整数类型,它是二进制右移运算符,它采用其第一个操作数的二进制表示,并将其向右移动多个位置。a >> b大致相同a / pow(2,b)

那句话充满了各种魔力。它到底在做什么?

uint256不是标准类型或函数;我假设它是一个 256 位的大数类型,具有适当的运算符重载,因此它的行为类似于标准数字类型。uint256(0)一个值为 0 的 256 位数字也是如此。

~是二元否定运算符;它将所有设置位归零,并设置所有零位。所以~uint256(0)将包含 256 位,全部设置。

最后,移位将这些位向右移动 32 位。所以前 32 位将全部为零,其余 224 位将被设置。

于 2013-11-13T17:18:00.760 回答
3

我的猜测是转变。它将位向右移动,可能是 32 位。由于 c++ 运算符重载,我们不能肯定地说没有看到 uint256 类。

于 2013-11-13T17:13:53.413 回答