For en god ordens skyld: Det er ikke sikkert at (tal & 1) kan bruges til at checke om et tal er ulige.
Hvordan ved du at % indebærer en division? Kompileren har lov til at oversætte % 2 til hvad den har lyst til (f.ex. en and eller en bitjump).
Husk de to første regeler for optimering:
1: Kompileren er sansynligvis bedre end dig til at optimere.
2: Optimer kun når det er nødvendigt.
En komplet løsning på OP's problem kunne se sådan ud:
#include <sstream>
#include <iostream>
using namespace std;
int main(void)
{
unsigned int n;
bool Done;
do
{
cout << "Indtast en lige tal mellem 2 og 1000: ";
cout.flush();
string s;
getline(cin, s);
stringstream ss(s);
if(ss >> n && n >= 2 && n <= 1000 && n%2 == 0)
Done = true;
else
Done = false;
}
while(!Done);
cout << "Du fik indtastet: " << n << endl;
}