static IPAddress CidrToMask(int cidr)
if (shift >= 32 || shift <= 0)
mask = (0xFFFFFFFF << shift) >> shift;
return new IPAddress(mask);
static int MaskToCidr(string ipAsString) {
Array.ForEach(ipAsString.Split('.'), (s) => Array.ForEach(Convert.ToString(int.Parse(s), 2).Where(c => c == '1').ToArray(), (k) => ones++));
static void Main(string[] args)
for (int i = -10; i <= 64; i++) {
var subnet = CidrToMask(i).ToString();
Console.WriteLine("mask {0}", subnet);
var cidr = MaskToCidr(subnet);
Console.WriteLine("cidr {0}", cidr);