# understanding bits and difficulty in a block header

Shows difficulty at 3,007,383,866,429.73, and bits at 392009692.

If I want to see how many zeros need to be in the hash, I believe I can just do:

``````(log2(3007383866429.73) + 32) / 4) => 18.362911541451258
``````

Which is correct.. But how does bits come from difficulty? How can I calculate the number of zeros from the bits instead of the difficulty?

Contrary to popular belief, Bitcoin's proof of work is not actually based on the number of zeroes. Rather the block hash, when interpreted as a 256 bit integer, must be less than the target value. The target value is what actually determines the difficulty. The target value is represented in a compact form in the `nBits` field of the block header.
The `nBits` field of the block header compresses the target from 256 bits into a 32 bits. A description of the format can be found here.
Basically, the `nBits` field, when represented in Big endian, is split into two parts: the first byte, and the last three bytes. The formula for decompressing the `nBits` field is as follows: `(last three bytes) * 256 ^ ((first byte) - 3)`. This gives you a 256 bit integer that has the first 3 most significant bytes of the target.