如何计算在C中的IP地址和子网掩码的AND操作?
问题描述:
我有一个IP地址和子网掩码,都在无符号长整数;我怎么能和这两个,并检查我的传入IP地址(IP2)是否属于相同的子网?如何计算在C中的IP地址和子网掩码的AND操作?
,如:
if (ip1 & subnet == ip2 & subnet)
then same subnet.
答
使用括号 - 优先级别是令人困惑:
if ((ip1 & subnet) == (ip2 & subnet))
...
原代码是有效的一样:
if (ip1 & (subnet == ip2) & subnet)
...
答
就像你做到了:
if ((ip1 & subnet) == (ip2 & subnet))
printf("same subnet 0%x", subnet);
(刚添加()以确保计算按正确的顺序完成)。
一个好的编译器应该警告这一点。如果用'-Wall'调用,GCC会这样做。 – 2010-02-22 14:30:49
哎呀!我怎么能错过它.. :( – Ashish 2010-02-22 14:30:54