# What is proofOfWorkLimit?

Look at the code below from android bitcoin wallet:

``````proofOfWorkLimit = Utils.decodeCompactBits(0x1d00ffffL);
``````

And look at the code from bitcoin qt wallet:

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

I assume that in second case ProofOfWorkLimit is 32 "0" and 224 "1" (000000...000111111111....11111111)?

So I don't have an idea how to get first case "0x1d00ffffL" from second case? In binary "0x1d00ffffL" is 11101000000001111111111111111.

P.S. I have looked in uint256.h. It wasn't helpful.

The first byte, 1D, is the length. The next three bytes are the high bytes of the hash. So we have `00ffff`, then we add `ff` bytes onto the end to get to 29 bytes. Then we're done.
• ~0 means all bits set. `>> 32` means to shift the bits left by 32 bits, shifting in zeroes in their place. – David Schwartz Apr 18 '14 at 9:16
• You want 27 zero bits. That's 3 bytes of all zero bits, followed by 3 more zero bits. `00011111` is `1F`. Since the whole thing is 32 bytes, and we need 3 zero bytes, the length of the non-zero segment is 29 bytes, which in hex is 1D. So unless I made a mistake, I get `0x1D1FFFFF`. – David Schwartz Apr 19 '14 at 20:27