2013-06-07 16 views
7

wszyscy. Kiedy ostatnio uczyłem się z OC, zawsze spotykam się w taki sposób.co to znaczy według typu = 1 << 0?

enum { 
    type1 = 0, 
    type2 = 1 << 0, 
    type3 = 1 << 1, 
}; 

Co to znaczy przez type = 1 < < 0? Do czego zwykle służy? Dzięki, naprzód.

+3

Jest to operator bitowy lewy-przesuwny. '1 << 0' jest praktycznie równe 1, ale autor enum po prostu chce uczynić go jaśniejszym, że znajduje się w tej samej grupie ostatnich wyrażeń' type3' 'type4' itp. – tia

+1

Naprawdę dziwne i nietypowe, by zawrzeć 0, ponieważ nie możesz traktować "type1" jako jednego z pozostałych. – unwind

+0

Dziękuję wszystkim. Mam to. – Calios

Odpowiedz

7

bitowe Przesunięcie w lewo operatora

W Celu-C bitowe lewo operatora przesunięcia jest reprezentowana przez ciąg „< <”, po którym następuje numer pozycji bitowych przesunięte

Source

Przeczytaj również this famous post, aby zrozumieć, co robi i jak

+1

To naprawdę fantastyczny post! Chcę tylko kroplę wody, ale wyślesz mi całą wiosnę. Przeczytam to jeszcze raz i jeszcze raz dziękuję. :) – Calios

5

< < jest operatorem binarnym

1 << 0 = 1 
1 << 1 = 2 
1 << 2 = 4 
3

Operator jest zmiana bitowe (nie tylko w celu C).

można przypisać każdy wpis w enum integervalue, więc to jest taka sama jak

enum { 
    type1 = 0, 
    type2 = 1, 
    type3 = 2 
}; 

można użyć shift-Operator może z łatwością upewnić się, że Twoje wpisy enum można logicznie dodany jak

int bitmask = type2 | type3 //bitmask = 3 
0

To przesunięcie przez zero bitów, czyli jego brak. Tylko dla jednolitości.

2

To jest jedna zmiana. Taka konstrukcja mogłaby być użyta, gdybyś musiał przypisać do niej kilka typów. Nazywa się to bit mask. Przykład:

enum { 
    type1 = 1, 
    type2 = 1 << 1, 
    type3 = 1 << 2, 
}; 

Znaczy typu 1 jest binarny 00000001, TYPE2 jest 00000010, 00000100 type3 jest i tak dalej. Tak więc, jeśli maska ​​typu ma wartość 3 (00000011), wiesz, że twój obiekt to type1 i type2.