Bien que les deux extraits ci-dessous présentent une légère différence dans la manipulation de la variable de recherche, la sortie semble toujours la même. Pourquoi ça?Discordance dans Snippet
premier extrait
#include<iostream>
using namespace std;
int main()
{
int number = 3,find;
find = number << 31;
find *= -1;
cout << find;
return 0;
}
deuxième Snippet
#include<iostream>
using namespace std;
int main()
{
int number = 3,find;
find = number << 31;
find *= 1;
cout << find;
return 0;
}
sortie pour les deux extraits:
-2147483648
Quelle est la taille de int sur votre machine? 32 bits? Ma bonne supposition serait que si vous changez 30 bits, vous devriez obtenir des résultats différents. – matcheek
Voir cette [question] (http://stackoverflow.com/questions/3784996/why-does-left-shift-operation-invoke-undefined-behaviour-when-the-left-side-opera). Vous invoquez un comportement indéfini. – Mat
@ matcheek: Oui c'est 32, mais je n'arrive pas à comprendre comment l'objectif de la question serait atteint s'il est changé à 30. – NirmalGeo