Look at the code below from bitcoinj (core\src\main\java\com\google\bitcoin\params\MainNetParams.java):
proofOfWorkLimit = Utils.decodeCompactBits(0x1d00ffffL);
And look at the code from bitcoin qt wallet (src\main.cpp):
static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
I assume that in second case bnProofOfWorkLimit consists of 32 "0" and 224 "1" (000000...000000000011111111111111111111....11111111).
So I don't have an idea how to get first case "0x1d00ffff" from second case?
P.S. I have looked in "uint256.h". It wasn't helpful.