Boolean Functions and Logic Gates