let bitwise_extraction first_bit last_bit x =
  assert (first_bit <= last_bit);(* first_bit <= last_bit *)
  assert (first_bit >= 0);       (* first_bit >= 0        *)
  let q = Big_int.div_big_int x (Big_int.power_int_positive_int 2 first_bit)
  in let r = Big_int.mod_big_int q (Big_int.power_int_positive_int 2 (1 + last_bit - first_bit))
  in r