4
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.
Thanks for reply. I am still confused. Can your answer how to get "first case" from "static CBigNum bnProofOfWorkLimit(~uint256(0) >> 27);" ? – Vitali Grabovski – 2014-04-18T09:02:47.477
~0 means all bits set.
>> 32means to shift the bits left by 32 bits, shifting in zeroes in their place. – David Schwartz – 2014-04-18T09:16:33.407Thanks again. Sorry for insistence but can you answer what exactly should I put here "Utils.decodeCompactBits(0x1d00ffffL);" in case "~uint256(0) >> 27" ? – Vitali Grabovski – 2014-04-18T10:35:47.760
1You want 27 zero bits. That's 3 bytes of all zero bits, followed by 3 more zero bits.
00011111is1F. 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 get0x1D1FFFFF. – David Schwartz – 2014-04-19T20:27:09.963