Because the math works.

 FALSE OR TRUE is TRUE, because 0 | 1 is 1.

 ... insert many other examples here.

Traditionally, C programs have conditions like

 if (someFunctionReturningANumber())

rather than

 if (someFunctionReturningANumber() != 0)

because the concept of zero being equivalent to false is well-understood.