Tôi nhận thấy rằng tôi có thể làm những việc như 2 << 5
đạt 64 và 1000 >> 2
nhận 250.
Ngoài ra tôi có thể sử dụng >>
trong print
:
print >>obj, "Hello world"
Có chuyện gì đang xảy ra ở đây?
Tôi nhận thấy rằng tôi có thể làm những việc như 2 << 5
đạt 64 và 1000 >> 2
nhận 250.
Ngoài ra tôi có thể sử dụng >>
trong print
:
print >>obj, "Hello world"
Có chuyện gì đang xảy ra ở đây?
Câu trả lời:
Tôi nghĩ đó là câu hỏi quan trọng và nó vẫn chưa được trả lời (OP dường như đã biết về các nhà điều hành ca). Hãy để tôi thử trả lời, toán tử >> trong ví dụ của bạn được sử dụng cho hai mục đích khác nhau. Trong điều kiện c ++, toán tử này được nạp chồng. Trong ví dụ đầu tiên, nó được sử dụng như toán tử bitwise (dịch chuyển sang trái), trong khi trong trường hợp thứ hai, nó chỉ được sử dụng như chuyển hướng đầu ra. I E
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
Trong python 3, có thể cung cấp đối số tệp trực tiếp như sau:
print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt
__rshift__
và __lshift__
.
Đây là các toán tử dịch chuyển theo bit.
Trích dẫn từ tài liệu :
x << y
Trả về x
với các bit được dịch chuyển sang trái bởi các vị trí y (và các bit mới ở phía bên phải là số không). Điều này cũng giống như nhân x
với 2**y
.
x >> y
Trả về x
với các bit được dịch chuyển sang phải theo y vị trí. Điều này cũng giống như chia x
cho 2**y
.
print bin(1)
, print bin(1 << 1)
, print bin(17)
, print bin(17 >> 1)
và vân vân. Bạn có thể thấy nó hoạt động như thế nào mà không cần giải thích.
print >>obj, "Hello world"
2 << 5
và 1000 >> 2
¯_ (ツ) _ / ¯
12 << 2
48
Giá trị nhị phân thực tế của 12 là "00 1100" khi chúng ta thực hiện câu lệnh trên Dịch trái (dịch chuyển 2 vị trí sang trái) trả về giá trị 48 Giá trị nhị phân của nó là "11 0000".
48 >> 2
12
Giá trị nhị phân của 48 là "11 0000", sau khi thực hiện câu lệnh trên Dịch phải (2 vị trí dịch sang phải) trả về giá trị 12 giá trị nhị phân của nó là "00 1100".
Trường hợp khác có liên quan print >>obj, "Hello World"
là cú pháp "in chevron" cho print
câu lệnh trong Python 2 (bị loại bỏ trong Python 3, được thay thế bằng file
đối số của print()
hàm ). Thay vì ghi vào đầu ra chuẩn, đầu ra được chuyển tới obj.write()
phương thức. Một ví dụ điển hình sẽ là các đối tượng tệp có một write()
phương thức. Xem câu trả lời cho một câu hỏi gần đây hơn: Dấu lớn hơn gấp đôi trong Python .
Chúng là toán tử dịch chuyển bit tồn tại trong nhiều ngôn ngữ lập trình chính thống, <<
là dịch chuyển trái và >>
là dịch chuyển phải, chúng có thể được chứng minh như bảng sau, giả sử một số nguyên chỉ chiếm 1 byte trong bộ nhớ.
| 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 |
Đây là những người vận hành ca
x << y Trả về x với các bit được dịch chuyển sang trái bởi y vị trí (và các bit mới ở phía bên tay phải là số không). Điều này cũng giống như nhân x với 2 ** y.
x >> y Trả về x với các bit được y chuyển sang phải. Điều này giống với // 'ing x 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
<<
,>>
,&
,|
,~
, và^
làm gì?