c ++中的位移

Sta*_*als 5 c++ bit-shift

我不明白为什么这给了我同样的答案:

 long long a = 3265917058 >> 24;
 std::cout << a << std::endl; //194

 long long ip = 3265917058;
 long long b = ip >> 24;
 std::cout << b << std::endl; //194
Run Code Online (Sandbox Code Playgroud)

但这不是:

 long long a = (3265917058 << 16) >> 24;
 std::cout << a << std::endl; //240

 long long ip = 3265917058;
 long long b = (ip << 16) >> 24;
 std::cout << b << std::endl; //12757488 - **i want this to be 240 too!**
Run Code Online (Sandbox Code Playgroud)

更新:我想要32位移位,但是我怎么能移动一个对于int变量来说太大的数字呢?Update2:我的答案是使unsigned int ip.那一切都会好的.

Pau*_*l R 7

你的文字常数3265917058int.添加LL后缀以获得预期的行为(u)r:

long long a = (3265917058LL << 16) >> 24;
Run Code Online (Sandbox Code Playgroud)