UVA 1590 IP Networks 位运算

//位运算 
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<stdlib.h> 
using namespace std;

typedef unsigned int uint;
typedef long long ll;

int main()
{
	int m;
	while(~scanf("%d", &m))
	{
		uint a, b, c, d, i;
		uint t, minn = 0-1, maxx = 0;
		
		for(i = 0; i < m; i++)
		{
			scanf("%u.%u.%u.%u", &a, &b, &c, &d); 
			t =  (a<<24) + (b<<16) + (c<<8) + d; //位运算的优先级不高,括号不能少 
			//地址的二进制前32-n位一定是和maxx和minn的前32-n位一致的,通过maxx和mann求出n 
			minn = minn > t ? t : minn;
			maxx = maxx < t ? t : maxx;
		}
		//遍历求n 
		uint mask;
		for(i = 0; i <= 32; i++)
		{
			mask = ~(((1ULL)<<i)-1U);  //ULL不能少  
			if( (mask&minn) == (mask&maxx))
			{
				break;
			}
		} 
		uint add = (long long)(minn&maxx) >> i << i;  //long long 不能少 
		printf("%u.%u.%u.%u\n", add>>24, add<<8>>24, add<<16>>24, add<<24>>24);
		printf("%u.%u.%u.%u\n", mask>>24, mask<<8>>24, mask<<16>>24, mask<<24>>24); 			
	}
	return 0;
}
上一篇:Deep Forest Towards an Alternative to Deep Neural Networks


下一篇:图学习笔记(三):图与图学习