Code:
#include <iostream>
void foo(int ix)
{
std::cout << "foo: ix = " << ix << std::endl;
std::cout << "foo: ix >> 17 = " << (ix >> 17) << std::endl;
ix = ix ^ (ix >> 17);
std::cout << "foo: ix = " << ix << std::endl;
}
void bar(int ix)
{
std::cout << "bar: ix = " << ix << std::endl;
std::cout << "bar: (unsigned)ix >> 17 = " << ((unsigned)ix >> 17) << std::endl;
ix = ix ^ ((unsigned)ix >> 17);
std::cout << "bar: ix = " << ix << std::endl;
}
int main()
{
foo(-9054424);
bar(-9054424);
return 0;
}
/* my output
foo: ix = -9054424
foo: ix >> 17 = -70
foo: ix = 9054354
bar: ix = -9054424
bar: (unsigned)ix >> 17 = 32698
bar: ix = -9066350
*/