Maybe a simple example will help clarify what others have been writing:
for example if c1 and c2 are:
c1 = 0110
c2 = 1011
then the mux (in verilog syntax)
always @(posedge clk) out <= sel ? c1 : c2;
the mux specifies the following and-or logic for generating out
out = sel & 0110 | ~sel & 1011;
expanding the logic to select each bit of the bus by the sel signal:
out = { sel & 0, sel & 1, sel & 1, sel & 0} |
{~sel & 1, ~sel & 0, ~sel & 1, ~sel & 1}
sel: invert, same, constant, invert
looking at each bit separatedly you can see that the following applies to each bit of out
this can be done using a truth table (in this case it's easy to see just written out)
out = {~sel, sel, 1, ~sel}
out is based entirely on sel or a constant there isn't a path from a c1 or c2 that exists in
the resulting circuit (after synthesis).