Int Code to BitFlag

Run Settings
LanguageC#
Language Version
Run Command
using System; using System.Collections.Generic; class MainClass { public static ulong CodeToBitFlag(int code) { //if (code < 0 || code >= 60) //throw new ArgumentOutOfRangeException("code", "Codes must be between 1 and 59 to avoid overflow problems problems converting to doubles."); return 1UL << (code - 1); } public static List<int> BitFlagToCodes(ulong flag) { var codes = new List<int>(); var i = 1; while (flag > 0) { if ((flag & 1) == 1) codes.Add(i); i += 1; flag = flag >> 1; } return codes; } static void Main() { Console.WriteLine(CodeToBitFlag(1)); Console.WriteLine(CodeToBitFlag(2)); Console.WriteLine(CodeToBitFlag(3)); Console.WriteLine(CodeToBitFlag(4)); Console.WriteLine(CodeToBitFlag(5)); Console.WriteLine("--------------------------"); Console.WriteLine(String.Join(",", BitFlagToCodes(1))); Console.WriteLine(String.Join(",", BitFlagToCodes(2))); Console.WriteLine(String.Join(",", BitFlagToCodes(4))); Console.WriteLine(String.Join(",", BitFlagToCodes(8))); Console.WriteLine("--------------------------"); Console.WriteLine(String.Join(",", BitFlagToCodes(3))); Console.WriteLine(String.Join(",", BitFlagToCodes(5))); Console.WriteLine(String.Join(",", BitFlagToCodes(4 | 8))); Console.WriteLine(String.Join(",", BitFlagToCodes(CodeToBitFlag(3) | CodeToBitFlag(10)))); Console.WriteLine("--------------------------"); Console.WriteLine(String.Join(",", BitFlagToCodes((ulong)((double)(CodeToBitFlag(20) | CodeToBitFlag(41)))))); Console.WriteLine("--------------------------"); for (var i = 2; i < 100; i++) { ulong f0 = CodeToBitFlag(i-1); ulong f = CodeToBitFlag(i); double d = (double)f; ulong fd = (ulong)d; if (f != fd) { Console.WriteLine($"Double mismatch at i={i}; d={d}, f={f}, fd={fd}"); break; } if (f < f0) { Console.WriteLine($"Overflow at i={i}; d={d}, f={f}, fd={fd}"); break; } } for (ulong l = 1UL << 60; l > 1; l++) { double d = (double)l; ulong ld = (ulong)d; if (l != ld) { var flags = String.Join(",", BitFlagToCodes(l)); Console.WriteLine($"Double mismatch: l={l}, d={d}, ld={ld}, flags={flags}"); break; } } } }
Editor Settings
Theme
Key bindings
Full width
Lines