Understanding Half Adders and Full Adders in Digital Logic