>>和<<在Python中是什么意思?


90

我注意到我可以做一些事情,例如2 << 5获得64和1000 >> 2获得250。

我也可以用>>print

print >>obj, "Hello world"

这是怎么回事



3
在这里,现在您可以将这些符号插入搜索引擎,并使其实际搜索它们:symbolhound.com
user2357112支持Monica


3
@ user2357112这将非常有帮助,谢谢。对于那些说这是一个基本问题的人,也许是,但是我没有按位运算符的概念,所以我永远也不会想到要在文档中查找...
user3201152'4

@joaquin现在是google中大于python的Google中的第一名。
Jordan Reiter

Answers:


63

我认为这是一个重要的问题,尚未得到回答(OP似乎已经了解移位运算符)。让我尝试回答一下,示例中的>>运算符用于两种不同的目的。用c ++术语来说,该运算符是重载的。在第一个示例中,它用作按位运算符(左移),而在第二个方案中,它仅用作输出重定向。即

2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj, 

with open('foo.txt', 'w') as obj:
    print >> obj, "Hello world" # hello world now saved in foo.txt

更新:

在python 3中,可以直接给file参数,如下所示:

print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt

11
仅供参考,您可能在Python代码中看到的右移运算符的另一种常见用法将出现在Airflow文件中。Airflow框架重载了'>>'运算符,以指示一个任务位于另一任务的上游:stackoverflow.com/questions/52389105/…–
schimmy

3
您实际上可以通过__rshift____lshift__方法覆盖这些运算符。
trudolf

我得到2 >> 5等于0。我认为应该等于0.0001?
lightbox142

1
@ teter123f操作是二进制的。它不是十进制运算。
yosemite_k

61

这些是按位移位运算符。

文档引用:

x << y

返回x左移y位的位(右侧的新位为零)。这是一样的乘x2**y

x >> y

返回x,将位向右移y个位。这是相同的划分x通过2**y


2
也许一个例子会有所帮助,键入在Python这一系列的:print bin(1)print bin(1 << 1)print bin(17)print bin(17 >> 1)等等。您无需说明即可查看其工作方式。
bartekbrak

4
位移运算符需要2个操作数,那么为什么操作数是“打印”,而操作数2是对象?就像print >>obj, "Hello world"
齐帆

这是对OP提供的上下文(因此OP知道)的答案,而不是所问的问题。
z33k

@Qi Fan @ z33k在编写此答案一年后,已对问题进行了编辑,以添加要打印的参考。原来的问题只提到2 << 51000 >> 2 _(ツ)_ /¯
詹姆斯

24

12 << 2

48

当我们执行上述语句时,实际的二进制值12是“ 00 1100”。向左移动(向左移动2位)返回值48,其二进制值为“ 11 0000”。

48 >> 2

12

二进制值48为“ 11 0000”,执行上述语句右移(右移2位)后,返回值12,其二进制值为“ 00 1100”。


12

涉及的另一种情况print >>obj, "Hello World"是Python 2中print 语句的“打印人字形”语法(在Python 3中已删除,由函数file参数代替)。而不是写入标准输出,而是将输出传递给方法。一个典型的例子是具有方法的文件对象。请参阅以下最新问题的答案:Python中的双大于号print() obj.write()write()


11

它们是许多主流编程语言中存在的位移运算符,<<是左移和>>是右移,它们可以如下表所示,假设一个整数在内存中仅占用1个字节。

| operate | bit value | octal value |                       description                        |
| ------- | --------- | ----------- | -------------------------------------------------------- |
|         | 00000100  |           4 |                                                          |
| 4 << 2  | 00010000  |          16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100  |           4 | move all bits to right 2 bits, filled with 0 at the left |

正是在寻找这个解释。
shaik moeed

7

这些是移位运算符

x << y返回x,其位向左移位y个位(右侧的新位为零)。这与x乘以2 ** y相同。

x >> y返回x,其位向右移y个位。这与//将x乘以2 ** y相同。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.