2013-08-13 29 views
14
enum 
    { 
     kFlag_FPS   = 1 << 0, 
     kFlag_Help  = 1 << 1, 
     kFlag_RedBlue3D = 1 << 2, 
    } 

Tôi cố gắng để hiểu những gì mã này là tôi hoàn toàn không biết gì:1 << 0 là gì?

1 << 0 

phương tiện?

Bất kỳ trợ giúp nào được đánh giá cao!

+10

Nó chỉ để làm cho nó trông nhất quán. – Mysticial

+0

Đó là dịch chuyển bit sang bên trái nhưng tôi không biết cách giải thích điều đó. – putvande

+0

1 << 0 là 1 dịch chuyển trái 0 lần, hoặc 1 * 2^0. Vì vậy, nó là 1. – BrainSteel

Trả lời

22

Từ MSDN - Shift Operators: >> and <<

là Nhà điều hành trái ca gây các mẫu bit trong toán hạng đầu tiên được chuyển sang bên trái bởi số bit được chỉ định bởi toán hạng thứ hai. Các bit bị bỏ trống bởi thao tác dịch chuyển là không được lấp đầy. Đây là thay đổi logic thay vì thao tác dịch chuyển và xoay.

Điều này có nghĩa là người dùng đang lấy giá trị bit của 1 và dịch chuyển các bit sang trái dựa trên số bên phải.

Điều đó có nghĩa là trong trường hợp này, giá trị của chúng sẽ trông giống như thế này theo dạng nhị phân.

1 << 0 = `0000 0001` 
1 << 1 = `0000 0010` 
1 << 2 = `0000 0100` 

Thay đổi đầu tiên là không cần thiết, nhưng có vẻ phù hợp hơn với phần còn lại.

+0

Bạn nên tránh tham chiếu 'MSDN' như một nguồn đáng tin cậy cho tham chiếu ngôn ngữ C++ IMHO –

+0

@ g-makulik: Tôi có xu hướng đồng ý, nhưng tài liệu MSDN cụ thể này có vẻ chính xác. –

2

Nó có thể là đơn giản

enum 
    { 
     kFlag_FPS   = 1, 
     kFlag_Help  = 1 << 1, 
     kFlag_RedBlue3D = 1 << 2, 
    } 

nhưng coder thích đối xứng hơn.

5

1 << 0 là 1 chuyển sang trái bằng 0 vị trí, mà chỉ 1.

4

Nhà điều hành << có chút thay đổi. Vì vậy, 1 << 2, bằng 4 khi bạn chụp 1 và dịch chuyển theo số 2 bit. Khi sử dụng 1 << 0, điều đó không ảnh hưởng đến giá trị và có thể làm cho mọi thứ xuất hiện nhất quán

3

x << y - có nghĩa là các bit dịch chuyển của x sang trái (giá trị lớn hơn) y lần. Trong môn toán, điều này trông giống như: x * (2^y) hoặc x * pow(2, y)