2011-07-02 29 views
5

Tôi đã giải quyết được sự cố trên Project Euler nhưng mất khoảng 4 phút để chạy, vượt quá thời gian được đề xuất, vì vậy tôi đã xem xét các giải pháp khác nhau trong diễn đàn. Một trong số chúng bao gồm biểu tượng << trong danh sách hiểu. Đây là hình thức trông giống như<< làm gì trong Python?

blist.extend([(i << 1) + 3 for i in range(num) if alist.get(i)]) 

Tôi không thể tìm thấy chính xác biểu tượng << này. Ai đó có thể giúp tôi?

+2

http://docs.python.org/library/operator.html#mapping-operators-to -functions – Trufa

Trả lời

10

Đó là một bit shift operator (Python docs), và là phổ biến trong nhiều ngôn ngữ lập trình, chẳng hạn như C, Java, PHP, vv Theo các tài liệu Python:

Họ chuyển đối số đầu tiên vào trái hoặc phải bởi số bit được đưa ra bởi đối số thứ hai.

Sự dịch chuyển bằng n bit phải được định nghĩa là chia cho pow (2, n). Một sự dịch chuyển trái bởi n bit được định nghĩa là phép nhân với pow (2, n). Số chuyển đổi âm tính tăng một ngoại lệ ValueError.

Vì vậy, trong trường hợp cụ thể của bạn, i << 1 nghĩa dịch trái 1 chút, đó là tương đương với nhân với 2^1, hoặc chỉ 2.

+0

vì vậy sau đó nếu nó là i >> 1 nó sẽ là mod (i, 2) hoặc nó sẽ di chuyển sang phải qua một số thập phân? – gtmanfred

+0

Thay đổi phải là phân chia bởi 2^n, hoặc trong trường hợp bạn trích dẫn, chỉ cần 2. Off đỉnh đầu của tôi, tôi nghĩ rằng nó chỉ là phân chia số nguyên quá, vì vậy tôi không nghĩ rằng bạn sẽ nhận được giá trị thập phân ... –

+0

đúng đó là những gì tôi có nghĩa là, tôi không biết tại sao tôi nói mod. Cảm ơn – gtmanfred

1

Đó là toán tử dịch chuyển bit nhị phân.

x << n 
x shifted left by n bits 

x >> n 
x shifted right by n bits 
Các vấn đề liên quan