我注意到我可以用2 << 5来得到64,用1000 >> 2来得到250。

我也可以在打印中使用>>:

print >>obj, "Hello world"

这里发生了什么?


当前回答

在您的示例中,>>操作符用于两个不同的目的。在c++术语中,这个操作符是重载的。在第一个例子中,它被用作位运算符(右移),

2 << 5  # shift left by 5 bits
        # 0b10 -> 0b1000000
1000 >> 2  # shift right by 2 bits
           # 0b1111101000 -> 0b11111010

而在第二个场景中,它用于输出重定向。你可以用它来处理文件对象,就像下面这个例子:

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

>>的第二次使用只适用于Python 2。在Python 3中,可以使用file=参数重定向print()的输出:

with open('foo.txt', 'w') as f:
    print('Hello world', file=f)  # "Hello world" now saved in foo.txt

其他回答

它们是存在于许多主流编程语言中的位移位运算符,<<是左移,>>是右移,它们可以演示如下表,假设一个整数只占用内存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 |

12 is less than < 2 48

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

48 >> 2 12

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

<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
          6<<2'4=6*2*2*2*2*2=64

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

在您的示例中,>>操作符用于两个不同的目的。在c++术语中,这个操作符是重载的。在第一个例子中,它被用作位运算符(右移),

2 << 5  # shift left by 5 bits
        # 0b10 -> 0b1000000
1000 >> 2  # shift right by 2 bits
           # 0b1111101000 -> 0b11111010

而在第二个场景中,它用于输出重定向。你可以用它来处理文件对象,就像下面这个例子:

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

>>的第二次使用只适用于Python 2。在Python 3中,可以使用file=参数重定向print()的输出:

with open('foo.txt', 'w') as f:
    print('Hello world', file=f)  # "Hello world" now saved in foo.txt