'&&'之间的区别是什么?和'&'在Ruby中

时间:2014-03-23 05:59:05

标签: ruby

最近,我在Ruby中观察到一个非常有趣的结果,同时使用了&&和&对于0和0的输入组合1.

有人可以就上面提到的两个运营商解释下面的输出吗?以下是使用Ruby 2.0.0-p451

实现的
2.0.0-p451 :006 > 0 && 1
 => 1 


2.0.0-p451 :008 > 0 & 1
 => 0 

谢谢

6 个答案:

答案 0 :(得分:8)

&&布尔 and。如果第一个参数为true-ish,则返回第二个参数。因为0在Ruby中是真的,所以返回1

&按位 and。它比较值的位表示。因为(成像8位)000000000)和000000011)没有共同的1位数,00000000({{ 1}})返回。

答案 1 :(得分:7)

&&是逻辑AND运算符。这将是真实的,IFF两个操作数都是真实的。它是懒惰的(又称短路),这意味着一旦结果完全确定它就会停止评估。 (因此,由于两个操作数都需要真实,如果第一个操作数是假的,你已经知道结果将是假的,甚至没有评估第二个操作数。)它也不会只返回truefalse,而是返回确定结果的操作数。 IOW:如果a是假的,它将返回a,否则它将返回b

nil && (loop {})
# => nil
# Note: the infinite loop is *not* evaluated
# Note: the return value is nil, not false

true && nil
# => nil

true && 'Hello'
# => 'Hello'

&只是调用方法&。它会做任何对象想要做的事情:

def (weirdo = Object.new).&(other)
  puts 'Whoah, weird!'
  'Hello, ' + other
end

weirdo & 'World'
# Whoah, weird!
# => 'Hello, World'

通常,&及其兄弟|应该执行连接和分离。因此,对于布尔值,他们执行AND和OR(TrueClass#&FalseClass#&NilClass#&TrueClass#|FalseClass#|NilClass#|&|是标准方法调用的异常,因此总是评估他们的参数,并且他们总是返回truefalse而不是他们的参数。

对于Set,他们执行set intersection并设置union:Set#&Set#|。对于其他集合(特别是Array s),它们还执行集合操作:Array#&Array#|

对于Integer,他们执行双补码二进制表示的BITWISE-AND:Fixnum#&Bignum#&Fixnum#|Bignum#|

答案 2 :(得分:0)

一个是布尔运算符,另一个是按位运算符:

  # Bitwise operators
  a = 78      #  01001110
  b = 54      #  00110110
  puts (a&b)  #  00000110 = 6
  puts (a|b)  #  01111110 = 126
  puts (a^b)  #  01111000 = 120
  puts (~a)   #  10110001 = -79
  puts (a<<2) #  00111000 = 312
  puts (a>>2) #  00010011 = 19

http://www.public.traineronrails.com/courses/ruby/pages/008-rubyoperators.html

答案 3 :(得分:0)

This page给出了Ruby中不同运算符的一个很好的解释。

&&是ruby中的逻辑AND运算符。

> a = true
> b = true
> c = false
> a && b
 => true 
> a && c
 => false 

&是ruby中的bitwise AND运算符。根据维基百科关于“按位AND运算符”描述的文章:

  

按位AND采用两个相等长度的二进制表示   对每对相应位执行逻辑AND运算。   如果第一位为1,则每个位置的结果为1   位是1;否则,结果为0。

答案 4 :(得分:0)

&&是合乎逻辑的。也就是说,如果a为真且b为真,则a && b返回true。 &是按位的。在(几乎)任何其他语言中,逻辑和0和1都是0,因为(几乎)所有其他语言都认为0是假的。但是在ruby中,除了nil和false之外的任何东西都被认为是假的。

答案 5 :(得分:0)

&& 是一个逻辑运算符,它将始终返回布尔值。 z
如果两个值均为true,则为 true

true && true

,如果任何值为false

,则将返回 false
false && true

现在是第二点运算符。 这是运算符的两个答案。

& is a Bitwise operator as mentioned in above answers, It compares bit representation in the form of 0 and 1.

另一个重要的答案是,在Ruby 2.6的升级中,其实现有所修改。

& is represented as intersection operator

例如:

[1, 2, 3] & [2, 3, 4]
$ [2, 3]