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 = div_big_int x (power_int_positive_int 2 first_bit) in
  let r = mod_big_int q (power_int_positive_int 2 (1 + last_bit - first_bit)) in
  r