为什么在Python中“ 50 << 6”为真,而“ 50 >> 6”为假?

时间:2019-07-03 00:46:16

标签: python

我只是在尝试一个简单的if语句,它无法按预期工作。我是否有错误或者我不了解if语句的功能?

代码是:

i = 50
n = 6

if i >> n:
  print("I is greater")
elif i << n:
  print("I is lesser")
elif i == n:
  print("I and N are same")
else:
  print("no result")

即使我输入更大或相等的值,输出也将是“我较小”。请帮助我了解其工作原理。

2 个答案:

答案 0 :(得分:5)

<<>>bitshift operators,而不是比较运算符。 50 >> 60,因此if语句因为是falsy而被评估为false。 50 << 6为3200,因此if语句的值为truthy,因此其值为true。

此代码可能以您“期望”它的方式起作用

i = 50
n = 6

if i > n:
  print("I is greater")
elif i < n:
  print("I is lesser")
elif i == n:
  print("I and N are same")
else:
  print("no result")

答案 1 :(得分:0)

“ <<”是按位左移。在某种程度上,它等于右操作数乘以2。

“ >>”是按位右移。在某种程度上,它等于将正确的操作数除以2。

在您的示例中,“ 50 << 6”表示左移50,它是二进制的110010(1 * 32 + 1 * 16 + 0 * 8 + 1 * 2 + 0 * 1 = 50),六次。因此,它变为110010000000 =3200。非零数字(例如3200)在python中计算为True。

同样,“ 50 >> 6”表示左移110010左移6次。左移一次后变为11001,左移两次后变为1100 ...,并左移六次后变为0。

在python中,零数字的值为False。