let get_operator_i = function
    CTTbinTimes -> mult_big_int | CTTbinDiv -> div_big_int
  | CTTbinPlusVV -> add_big_int | CTTbinPlusPV -> add_big_int
  | CTTbinMinusVV -> sub_big_int | CTTbinMinusPP -> sub_big_int | CTTbinMinusPV -> sub_big_int
  | CTTbinModulo -> mod_big_int
  | CTTbinLshift -> lsl_big_int | CTTbinRshift -> asr_big_int
  | CTTbinLogAnd ->
      let f n1 n2 =
          if n1 = zero_big_int || n2 = zero_big_int then
              zero_big_int
          else
              unit_big_int
      in
      f
  | CTTbinLogOr -> 
      let f n1 n2 =
          if n1 = zero_big_int && n2 = zero_big_int then
              zero_big_int
          else
              unit_big_int
      in
      f
  | CTTbinIntAnd -> land_big_int
  | CTTbinIntOr -> lor_big_int
  | CTTbinIntXor -> lxor_big_int
  | CTTbinLessThan ->
      let f n1 n2 = if lt_big_int n1 n2 then unit_big_int else zero_big_int in f
  | CTTbinLessEqual ->
      let f n1 n2 = if le_big_int n1 n2 then unit_big_int else zero_big_int in f
  | CTTbinGtrThan ->
      let f n1 n2 = if gt_big_int n1 n2 then unit_big_int else zero_big_int in f
  | CTTbinGtrEqual ->
      let f n1 n2 = if ge_big_int n1 n2 then unit_big_int else zero_big_int in f
  | CTTbinEqual ->
      let f n1 n2 = if eq_big_int n1 n2 then unit_big_int else zero_big_int in f
  | CTTbinNotEqual ->
      let f n1 n2 = if not (eq_big_int n1 n2) then unit_big_int else zero_big_int in f
  | _ -> assert false