32-bit operating systems can only address around 3GB, Windows 7 x64, Windows XP x64, Vista x64 etc.. can all utilise 4GB. It's also possible for certain 32bit operating systems to use PAE (Physical Address Extension) to extend addressing to 36-bits and consequently support up to 64GB of memory depending on hardware.
Actually, a 32-bit OS can address all 4GB. The problem is that various hardware devices (everything really, but GPUs are the killer) require their memory to be mapped in this address space. If you've only got a 4GB address space, it eats away at it. With PAE enabled they can be remapped past 4GB to avoid this issue, then you just run into kernel/userspace memory split limitations.