C++: co robi (a<
Mam plik nagłówkowy C++, który zawiera następujące definicje:
#define CACHE_NUM_WAYS (1<<1)
#define CACHE_DATA_SIZE (1<<8)
Jest używany jako liczba całkowita w pozostałej części kodu.
Co to znaczy? A jaka jest jego wartość?5 answers
1
00000000 00000001 changes to 00000000 00000010
1
00000000 00000001 changes to 00000001 00000000
/ Align = "left" / Dla każdego 1 po prawej stronie możesz myśleć o sobie jako o pomnożeniu wartości po lewej przez 2. Zatem 2
Możesz również wykonać 4 > > 1 = 2 (i 5 > > 1 = 2 od zaokrąglenia w dół) jako operację odwrotną.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:29:46
Są to operatory przesunięć bitowych.
Http://msdn.microsoft.com/en-us/library/336xbhcz (v=vs.80). aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:27:22
<<
jest przesunięciem bitowym w lewo (istnieje również >>
przesunięcie bitowe w prawo)
jeśli masz 32-bitową liczbę całkowitą
1 = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:29:08
Operator <<
jest operatorem bitowym przesunięcia w lewo.
Więc kiedy piszesz 1<<17
, binarna Reprezentacja 1
jest przesunięta w lewo o 17
bity jako:
//before (assume 1 is represented by 32-bit)
1 << 17
0000 0000 0000 0000 0000 0000 0000 0001 << 17 (before - binary representation)
//after
0000 0000 0000 0010 0000 0000 0000 0000 (after - binary representation)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:28:49
a<<b
dla liczb całkowitych oznacza "przesunięcie w lewo". Bitowa reprezentacja a
jest przesunięta w lewo b
bitów. Jest to to samo co mnożenie przez (2 do potęgi b
).
Więc w twoim przykładzie, (1<<1)
jest 1*(2^1)
jest 2
, (1<<8)
is 1*(2^8)
is 256
.
Warto zauważyć, że ogólnie rzecz biorąc, podobnie jak w przypadku innych operatorów w c++, <<
mogą być nadpisane do wykonywania innych funkcji. Domyślnie strumienie wejścia/wyjścia nadpisują ten operator, aby umożliwić pisanie zwięzłego kodu w celu wysłania kilka parametrów do strumienia. Więc możesz zobaczyć kod w ten sposób:
cout << something << somethingelse
I <<
Czy Nie oznacza w tym kontekście przesunięcie w lewo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 15:32:42