• [^] # 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 suppose que les fonctions asr et lsr sont du même acabit

    Tu supposes bien, elles sont définies dans le module Pervasives :

    external ( lsl ) : int -> int -> int = "%lslint"
    external ( lsr ) : int -> int -> int = "%lsrint"
    external ( asr ) : int -> int -> int = "%asrint"

    et la doc précise bien que le comportement est non spécifié :

    val (lsl) : int -> int -> int
     n lsl m shifts n to the left by m bits. The result is unspecified if m < 0 or m >= bitsize, where bitsize is 32 on a 32-bit platform and 64 on a 64-bit platform.
    val (lsr) : int -> int -> int
     n lsr m shifts n to the right by m bits. This is a logical shift: zeroes are inserted regardless of the sign of n. The result is unspecified if m < 0 or m >= bitsize.
    val (asr) : int -> int -> int
     n asr m shifts n to the right by m bits. This is an arithmetic shift: the sign bit of n is replicated. The result is unspecified if m < 0 or m >= bitsize.
    

    Reste la question : pourquoi avoir suivi le comportement du C au lieu de définir le résultat proprement ? Je n'en ai aucune idée.

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