我注意到我可以执行2 << 5
之类的操作来获得64而1000 >> 2
可以获得250。
我也可以在>>
中使用print
:
print >>obj, "Hello world"
这里发生了什么?
答案 0 :(得分:36)
答案 1 :(得分:24)
我认为这是一个重要的问题而且尚未得到解答(OP似乎已经了解了移位运营商)。让我试着回答一下,&gt;&gt;您的示例中的运算符用于两个不同的目的。在c ++术语中,此运算符被重载。在第一个示例中,它用作按位运算符(左移),而在第二个示例中,它仅用作输出重定向。即。
with open('foo.txt', 'w') as obj:
print >> obj, "Hello world" # hello world now saved in foo.txt
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
在python 3中,可以直接给出file参数:
{{1}}
答案 2 :(得分:9)
涉及print >>obj, "Hello World"
的另一个案例是Python 2中print
语句的“print chevron”语法(在Python 3中删除,替换为file
} print()
函数的参数)。输出不是写入标准输出,而是传递给obj.write()
方法。一个典型的例子是具有write()
方法的文件对象。请参阅最近一个问题的答案:Double greater-than sign in Python。
答案 3 :(得分:8)
12 << 2
48
当执行上面的语句时,二进制实际值12为“ 00 1100”左移(向左移动2位)返回值48,其二进制值为“ 11 0000”。
48 >> 2
12
二进制值48为“ 11 0000”,执行上述语句右移(右移2位)后,返回值12,其二进制值为“ 00 1100”。
答案 4 :(得分:5)
x&lt;&lt; y返回x,位置向左偏移y位(和 右侧的新位为零。这是一样的 将x乘以2 ** y。
x&gt;&gt; y返回x,位移到 在y的地方。这与//“x by 2 ** y”相同。
答案 5 :(得分:1)
它们是许多主流编程语言中都存在的位移运算符,<<
是左移,>>
是右移,它们可以证明如下表,假设整数仅取内存中有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 |
答案 6 :(得分:1)
这些是按位移位运算符。
4 << 4 这与x乘以2 y相同。**
2 ** 4
16 * 4
64
121 >> 4
这与将x除以2 y相同。**
121 // 2
60 // 2
30 // 2
15 // 2
7
答案 7 :(得分:0)
<< 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
答案 8 :(得分:0)
我在 Python 2.7 和 Python 3.8 上验证了以下内容
我确实打印了(100<<3) 将 100 转换为二进制会得到 1100100。 我所做的是我删除了前 3 位并在末尾添加了 3 位值为“0”。 所以结果应该是 0100000,我把它转换成十进制,结果是 32。
令我惊讶的是,当我执行 print(100<<3) 时,答案是 800。我很困惑。 我将 800 转换为二进制以检查发生了什么。 这就是我得到的 1100100000。
如果你看到 800 是 Python 的答案,他们没有移动或删除前 3 位,而是将值“0”添加到最后 3 位。
如 print(100>>3) ,工作完美。我做了手动计算并检查了python的打印结果。它工作正常。删除最后 3 位并将值“0”添加到前 3 位。
看起来像 (100<<3) ,左移运算符在 Python 上有一个错误。
答案 9 :(得分:0)
是“按位”运算符。 https://wiki.python.org/moin/BitwiseOperators
>>> help("symbols")
+-------------------------------------------------+---------------------------------------+
| Operator | Description |
|=================================================|=======================================|
| "<<", ">>" | Shifts |
+-------------------------------------------------+---------------------------------------+
| "&" | Bitwise AND |
+-------------------------------------------------+---------------------------------------+
| "|" | Bitwise OR |
+-------------------------------------------------+---------------------------------------+
| "~x" | bitwise NOT |
+-----------------------------------------------------------------------------------------+
| "^" | Bitwise XOR |
+-------------------------------------------------+---------------------------------------+
x << y
返回 x 的位向左移动 y 位(右侧的新位为零)。这与将 x 乘以 2**y 相同。
x >> y
返回 x 位右移 y 位。这与 //'ing x by 2**y 相同。
PD: 在 python 3.9 中,运算符 " | " 应用于字典合并字典。
https://docs.python.org/3.9/whatsnew/3.9.html
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
答案 10 :(得分:0)
向左移动 2(二进制)5 位。 (在右边注入零)
bin(16) # '0b10'
shifted = bin(2) + '0' * 5 # '0b1000000'
int(shifted, 2) # 64
2 << 5 # 64
将 1000(二进制)右移 2 位。 (向左注入零)
bin(1000) # '0b1111101000'
# add 00 to the left and remove last digit from the right
# '0b 00(add these bits) 11111010 00(remove these bits)'
shifted = '0b0011111010'
int(shifted, 2) # 250
1000 >> 2 # 250