Co to jest 1 << 0?


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

Próbuję zrozumieć, czym jest ten kod, nie do końca rozumiem, co to jest:
1 << 0

znaczy?
Każda pomoc jest mile widziana!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Od

Operatory zmiany MSDN: & > & > i & < & <
http://msdn.microsoft.com/en-u ... rator przesunięcia w lewo wymusza wzór bitowy w pierwszym operandzie
przesunięcie w lewo o liczbę bitów określoną przez sekundę
operand. Bity zwolnione przez operację przesunięcia są wypełniane zerem. to
logiczne przesunięcie zamiast przesuwania i obracania.

Oznacza to, że użytkownik przyjmuje wartość bitu
1
i przesuwa bity w lewo na podstawie poprawnej liczby.
Oznacza to, że w tym przypadku ich wartości będą wyglądać tak w postaci binarnej.
1 << 0 = `0000 0001`
1 << 1 = `0000 0010`
1 << 2 = `0000 0100`

Pierwsza zmiana jest niepotrzebna, ale wygląda bardziej spójnie z resztą.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

1 & < & < 0
jest 1 przesunięte w lewo o 0 pozycji, czyli tylko 1.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

x & < & < y
- przesuwa bity x w lewo (o większą wartość) o współczynnik y.
W matematyce wygląda to tak:
x * (2 ^ y)
lub
x * pow (2, y)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Operator
& < & <
jest nieco przesuwny. Zatem
1 & < & < 2
jest równe
4
, jeśli weźmiesz
1
i przesuniesz
2
bity. W przypadku korzystania z
1 & < & < 0
nie wpływa to w żaden sposób na wartość i prawdopodobnie ma na celu zapewnienie spójności
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To mogło być proste
enum
{
kFlag_FPS = 1,
kFlag_Help = 1 << 1,
kFlag_RedBlue3D = 1 << 2,
}

ale programista bardziej lubi symetrię.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

& > & > (Przesunięcie w prawo ze znakiem)
jeśli liczba jest ujemna, to 1 jest używane jako wypełniacz, a jeśli liczba jest dodatnia, to 0 jest używane jako wypełniacz.
int x = -4; 
System.out.println(x>>1);//output -2
int y = 4;
System.out.println(y>>1);//output 2

& > & > & > (Przesunięcie w prawo bez znaku)
w operatorze Java '& > & > & > 'to operator przesunięcia w prawo bez znaku. Zawsze wypełnia 0 niezależnie od znaku liczby.
// x jest przechowywane przy użyciu formy uzupełnienia do 32-bitowej 2.

// reprezentacja binarna -1 to wszystkie 1s (111..1)
int x = -1; 
System.out.println(x>>>29);// The value of 'x>>>29' is 00...0111
System.out.println(x>>>30);// The value of 'x>>>30' is 00...0011
System.out.println(x>>>31);// The value of 'x>>>31' is 00...0001

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się