Logic functions should be cascade-able so that one's output can feed another's input in a logical string. The OP's proposed **NOT** construction fails to be cascade-able because reference point for input differ from the reference point for output.<br> However, such a construction is possible at the beginning or end of a cascade, where no other logic need be driven. At the end of a logic cascade, we have freedom to choose the reference point. For cascaded logic strings, the reference point is always the same (most often GND).<br> An example:<br> Suppose we wish to drive an indicator like a LED. We have a choice to reference the LED to *logic low* or to *logic high*...that is, to GND or to Vdd. The choice of reference point allows us to invert the LED's indicator function: <!-- Begin schematic: In order to preserve an editable schematic, please don't edit this section directly. Click the "edit" link below the image in the preview instead. --> ![schematic](https://i.sstatic.net/mLhOQM8D.png) <!-- End schematic -->