У меня есть IP-адрес и маска подсети, оба без знака long;как я могу И оба из них и проверить, принадлежит ли мой входящий IP-адрес (IP2) к той же подсети?
Используйте круглые скобки - уровни приоритета сбивают с толку:
if ((ip1 & subnet) == (ip2 & subnet)) ...
Исходный код был фактически таким же, как:
if (ip1 & (subnet == ip2) & subnet) ...
Так же, как вы это сделали:
if ((ip1 & subnet) == (ip2 & subnet)) printf("same subnet 0%x", subnet);
(только что добавили (), чтобы убедиться, что вычисления выполнены в правильном порядке).