Tolerance stackup is simply the effect of multiple dimensions that are each within tolerance, but the cumulative effect is outside a specified range. Lets say we put down bricks in a walkway. Each brick is 12 inches long "nominally" and I decide I can lay 20 of them in a 20 foot space (I'm not making things difficult with spacing. Lets further say every brick is made to be 12 inches long plus a tolerance of 1/16 inch, minus nothing. If I had a batch of bricks, every one 1/16 inch oversize, then the 20 bricks would be 20/16 or 1-1/4 inch too long and wouldn't fit due to the tolerance stackup. Each brick is in tolerance, but the total is outside my desired boundary.
With machined parts dimensions tend to the high side. In other words, say I tell a machinist I want a series of round bars and I'd like the diameter to be 5.000 inches. I can tolerate anything between 4.999 to 5.001. Since the bars would be machined from large to small, in a 100 given samples more would be 5.001 than would be 4.999.
The opposite is true if a machinist is making holes in something. Lets say I want a 5.000 inch hole and I'll settle on anything from 4.999 to 5.001. Since the machinist is making a hole, going from small to big, more will come out at 4.999 than at 5.001.
Now, if I select a hole at 4.999 and a bar at 5.001 I won't be able to put them together because they interfere. If I pick a hole at 5.001 and a bar at 4.999 the combination will be loose. The difference between the fits is because of tolerance stackup.