SetCompact sort of compresses the big 256 integer into a 32 bit value.

0x1d00ffff is the reference value that represents difficulty 1.

It basically stands for:

0x1d00ffff

nSize = 0x1d

nWord = 0xfffff

Target = nWord << ( 8 * (nSize-3) )

Target = 0xfffff << (8 * 26)

So Bits=0x1d00ffff adds up to the Target of 00000000ffff0000000000000000000000000000000000000000000000000000

If you'd take the current bits; 436249641 = 0x1A00A429, you get a target:

0xA429 << ( 8 * (0x1A-3) ) => 00000000000000a4290000000000000000000000000000000000000000000000

A new (mined) block must have a hash value lower from the current target, in order for it to get accepted by the network.

Hash rates impact the block.nBits in a way that each 2016 blocks new target value (encoded in Bits) for the next 2016 blocks is calculated - and then enforced while verifying blocks.

The idea is that there should be exactly 2 weeks difference in the timestamps of the two blocks that are 2016 apart - if the difference was longer the target value is decreased, if shorter - increased, always proportionally.