This page assumes you know nothing. We build every word, symbol, and picture the parent note 5.4.4 leans on, in an order where each idea rests on the one before it.
Picture a row of light switches. Each switch is a bit. If I have 3 switches, how many different patterns can they show? Switch each on or off independently:
Look at the red count on the right: 3 switches give 2×2×2=8 patterns. In general:
Why the topic needs this. A memory address is a row of bits. The whole game of caches is: "how many bits do I spend on each job?" — and "how many patterns can these bits name?" is exactly 2n.
We just saw 8=23. The exponent notation 2n means "multiply 2 by itself n times".
20=1,21=2,22=4,23=8,26=64,210=1024
Now the reverse question. Suppose I have 64 patterns and I ask: how many switches did that take? The answer is 6, because 26=64. The tool that answers "which exponent produces this number?" is log2.
Writing a 32-bit address as 32 zeros and ones is painful. Hex packs 4 bits into one symbol, because 4 bits give 24=16 patterns and hex has exactly 16 digits: 0 1 2 3 4 5 6 7 8 9 A B C D E F.
The 0x prefix just flags "this is hex". So 0x2 means the value 2; 0xA9 means 10×16+9=169.
Why the topic needs this. Addresses are shown in hex everywhere in the parent (tag 0x2, index 0xA9). Hex is only a rewriting of the bit row — no new information, just fewer characters.
Why the topic needs this. The entire parent page is about cutting one address into three fields. If you don't know an address is just a row of N bits, the cutting has no meaning.
The red bracket shows one line: the CPU asked for the byte marked with the arrow, but the cache grabbed the whole bracketed run. It bets you'll want the neighbours next — that bet is spatial locality.
Why the topic needs this. The line is the unit everything measures against: offset bits = "which byte inside the line", and line count =C/L drives the index bits.