我注意到我可以做一些事情,例如2 << 5
获得64和1000 >> 2
获得250。
我也可以用>>
在print
:
print >>obj, "Hello world"
这是怎么回事
我注意到我可以做一些事情,例如2 << 5
获得64和1000 >> 2
获得250。
我也可以用>>
在print
:
print >>obj, "Hello world"
这是怎么回事
Answers:
我认为这是一个重要的问题,尚未得到回答(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
__rshift__
和__lshift__
方法覆盖这些运算符。
print bin(1)
,print bin(1 << 1)
,print bin(17)
,print bin(17 >> 1)
等等。您无需说明即可查看其工作方式。
print >>obj, "Hello world"
2 << 5
和1000 >> 2
_(ツ)_ /¯
涉及的另一种情况print >>obj, "Hello World"
是Python 2中print
语句的“打印人字形”语法(在Python 3中已删除,由函数的file
参数代替)。而不是写入标准输出,而是将输出传递给方法。一个典型的例子是具有方法的文件对象。请参阅以下最新问题的答案:Python中的双大于号。print()
obj.write()
write()
它们是许多主流编程语言中存在的位移运算符,<<
是左移和>>
是右移,它们可以如下表所示,假设一个整数在内存中仅占用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 |
这些是移位运算符
x << y返回x,其位向左移位y个位(右侧的新位为零)。这与x乘以2 ** y相同。
x >> y返回x,其位向右移y个位。这与//将x乘以2 ** y相同。
<< 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
<<
,>>
,&
,|
,~
,和^
做什么?