Witam wszystkich, piszę pierwszy program w c, mam pytanie odnośnie warunków if bo niestety mam jakieś problemy

1.
Jak mocno rozbudowane mogą być, ile wartości można że sobą porównywać jednym warunkiem if?
np. tutaj:
Kod:
if ((PINA & (1<<PA4)) | (PINA & (1<<PA5)) | (PINA & (1<<PA6)))
porównuje trzy wartości, chodzi mi o to ile ich może być maksymalnie, tak by kompilator dał radę.
2.
Oraz jak daleko można się posunąć z rozbudowywaniem "drzewa" warunków, ile poziomów można stworzyć? W sensie że warunek w warunku i tak dalej.
3.
Przy linijce kodu
Kod:
else if (!(PINC & (1<<PC4)) & (PINC & (1<<PC6)))
dostaję od Eclipse taki alert:
"suggest parentheses around operand of ‘!’ or change ‘&’ to ‘&&’ or ‘!’ to ‘~’ [-Wparentheses]"
Nie wiem o co chodzi niestety

Jestem bardzo początkujący. To moje pierwsze spotkanie z językiem c