Why does "!=LOW" != "HIGH"? I'm learning about accessing ports directly on the ATMEGA 328 using an Arduino Uno. The program sets up pin 13 as an output and pin 2 as an input. I then enable the pull up resistor on pin 2. 

I read Pin 2 and set the LED high or low depending on if pin 2 is high or low. 

Why is it that I cannot seem to use == HIGH in my if statement instead of != LOW?

void setup() {
  MCUCR &amp;= ~(1 &lt;&lt; 4); //disables pull-up disable (redundant as default is off)
  DDRB |= (1 &lt;&lt; 5); //sets pin 13 (B5 on ATMEGA 328) as output
  DDRD &amp;= ~(1 &lt;&lt; 2); //sets pin 2 (D2 on ATMEGA 328) as input (redundant as default is input)
  PORTD |= (1 &lt;&lt; 2); //since it's an input sets pull-up resistor ON
  PORTB &amp;= ~(1 &lt;&lt; 5); //sets pin 13 (B5 on ATMEGA 328) as LOW

}

void loop() {
  if ((PIND &amp; (1 &lt;&lt; 2)) != LOW) PORTB |= (1 &lt;&lt; 5); //sets pin 13 (B5 on ATMEGA 328) as HIGH
  else PORTB &amp;= ~(1 &lt;&lt; 5); //sets pin 13 (B5 on ATMEGA 328) as LOW
   delay(100);

}
Because 

((PIND &amp; (1 &lt;&lt; 2)) != LOW)


means exactly

(PIND &amp; 4) != 0


and that is true if PIND is 4, 5, 6, 7, 12, 13, ... (any number having 4 in it binary), so it yelds

4 != 0 


Which is definitively not equal

4 == 1




BTW: in C any integer != 0 is true and 0 is false, so you can as well write:

if (PIND &amp; (1 &lt;&lt; 2)) PORTB |= (1 &lt;&lt; 5); //sets pin 13 (B5 on ATMEGA 328) as HIGH