What are the main differences between setting, clearing, toggling, and reading bits in hardware registers?