• [^] # Re: Primitive en C pour OCaml

    Posté par . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 4.

    Je me suis précipité dans mon code, celui-ci est plus « naturel » :

    let rec ( << ) m n = 
     if n < 0 then m >> (~- n)
     else if n >= 64 then Int64.zero
     else Int64.shift_left m n
    and ( >> ) m n =
     if n < 0 then m << (~- n)
     else if n >= 64 then (if Int64.compare m Int64.zero < 0 then Int64.minus_one else Int64.zero)
     else Int64.shift_right m n;;
    val ( << ) : int64 -> int -> int64 = <fun>
    val ( >> ) : int64 -> int -> int64 = <fun>

    et on a une certaine cohérence :

    -16L << 60;;
    - : int64 = 0L
    -1L << 64;;
    - : int64 = 0L
    -16L >> 60;;
    - : int64 = -1L
    -1L >> 64;;
    - : int64 = -1L

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.