public static void Main()
int[] curflags = new int[4] {0,1,2,3};
int[] balances = new int[2] {0,2};
int[] ruleflags = new int[2] {0,1};
Console.WriteLine("original\trules\tREB=0\tREB>0");
for (int i=0; i<curflags.Length;i++)
for (int j=0; j<ruleflags.Length;j++)
Console.WriteLine("{0}\t\t\t{1}\t\t{2}\t\t{3}",curflags[i], ruleflags[j],RulesFlag(curflags[i],ruleflags[j],balances[0]),RulesFlag(curflags[i],ruleflags[j],balances[1]));
public static int RulesFlag( int origflag, int ruleflag, int rebal) {
int res = origflag|rebal;
return (ruleflag==0) ? (res & ~(1<<0)) : (res|=(1<<0));