przesuniecie bitu o 2 miejsca w lewo

0

Cześć wszystkim, na studiach otrzymałem zadanie aby zaprojektować schemat blokowy algorytmu w programie "Flowgorithm", 9/10 zadań zrobiłem, lecz na ostatnim poległem i od wczoraj nie wiem jak do tego podejść, zadanie brzmi następująco:

"Liczby pierwsze – generacja sitem Atkina-Bernsteina"

po 2 godzinach męczarni, zacząłem szukać w internecie i znalazłem kod c++ który odpowiada temu zadaniowi

#include <iostream>
#include <cmath>

using namespace std;

int main( )
{
  unsigned int n, g, x, y, xx, yy, z, i;
  bool * S;

  cin >> n;
  S = new bool [ n + 1 ];
  for( i = 5; i <= n; i++ ) S [ i ] = false;
  g = ( unsigned int ) ( sqrt ( n ) );
  for( x = 1; x <= g; x++ )
  {
    xx = x * x;
    for( y = 1; y <= g; y++ )
    {
      yy = y * y;
      z = ( xx << 2 ) + yy;
      if( ( z <= n ) && ( ( z % 12 == 1 ) || ( z % 12 == 5 ) ) ) S [ z ] = !S [ z ];
      z -= xx;
      if( ( z <= n ) && ( z % 12 == 7 ) ) S [ z ] = !S [ z ];
      if( x > y )
      {
        z -= yy << 1;
        if( ( z <= n ) && ( z % 12 == 11 ) ) S [ z ] = !S [ z ];
      } 
    }
  }
  for( i = 5; i <= g; i++ )
    if( S [ i ] )
    {
      xx = i * i;
      z = xx;
      while( z <= n )
      {
        S [ z ] = false;
        z += xx;
      }
    }
  cout << 2 << " " << 3 << " ";
  for( i = 5; i <= n; i++ )
    if( S [ i ] ) cout << i << " ";
  cout << endl;
  delete [ ] S;
  return 0;
} 

Niestety program nie rozpoznaje przesunięcia bitu o 2 znaki w lewo jako " << " lub " shl ", może ktoś ma jakiś pomysł jak to inaczej zapisać?
Myslałem już nad zastosowaniem z = (xx ^-2) + yy lecz tez nie działa

ScreenFlowgorithm

1

To taka moja podpowiedź. Co się stanie jak masz liczbę 32 i przesuniesz o jeden bit? A co jak masz 64 i zrobisz to samo? Jaka "operacja" matematyczna się wykona?

1

No. To już wiesz jak można zapisać tą operację inaczej :)

0

Problem rozwiązany, @Dregorio, dziękuje za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1