11
votes

Ruby: Qu'est-ce que l'extrait: (Num & 1) == 0 exactement?

Je regardais une vidéo de MetaProgramming de PragProg, et Dave Thomas a montré cet extrait de code:

module Math
  class << self
    def is_even?(num)
      (num & 1) == 0 # What exactly is going on here? Particularly (num & 1)
    end
  end
end

puts Math.is_even? 1 # => false
puts Math.is_even? 2 # => true


0 commentaires

3 Réponses :


21
votes

& est un bitwise et opérateur. Faire (num & 1) vérifie si le dernier bit (le moins significatif) du numéro est défini. S'il est défini, le nombre est impair et s'il n'est pas défini, c'est même.

C'est juste un moyen rapide de vérifier si un numéro est pair ou impair.

Vous pouvez voir une liste des opérateurs de bits de rubis ici: http: // www. techotopia.com/index.php/ruby_opérators#ruby_bitwise_opérators


0 commentaires

21
votes

C'est un peu d'astuce: chaque chiffre binaire qui a le moins significatif à 0 est même et impair sinon. Ceci parce que les pouvoirs de deux sont 1,2,4,8,16, ... , alors que se passe-t-il, c'est que lorsque vous faites un peu et avec 1, vous obtenez 0 si le bit le moins significatif était 0 et 1 sinon. Donc, vous pouvez facilement reconnaître si un numéro si même en le faisant.

Bien sûr, cela fonctionne simplement parce que l'arithmétique utilisé dans les processeurs est binaire, sinon ce serait juste la merde ..

juste un exemple < / p> xxx

vicefersa xxx


0 commentaires

3
votes

x & y est un numéro où pour tous les i i i th bit est 1 si et seulement si le i < / Code> Th Bit of X et le i ort bit de y sont 1 et 0 sinon.

Etant donné que 1 est le numéro où seul le bit est 1, x & 1 est 1 si le dernier bit de x est 1 et 0 sinon.

Étant donné que le dernier bit d'un numéro est 1 si c'est impair et 0 s'il est même, vérifiez si x & 1 est égal à la vérification si un nombre est même.


0 commentaires