C++按位运算

来源:百度知道 编辑:UC知道 时间:2024/06/06 20:43:39
unsigned int k=430U;
unsigned int j=((k>>4)& ~(~0<<3));
cout<<j<<endl;
输出结果是2? 我编译过了,结果我不能理解!
~(~0<<3)结果搞不懂?望哪位能解释!谢谢!
二楼的告诉你,编译器好得很!结果是正确的!只是想请你们帮详解下下!

#include <iostream>
using namespace std;

int main(){
unsigned k=430U;

cout<<~(~0u<<3u)<<endl; // 7

cout<<(~0u<<3u) <<endl; // 4294967288

cout<< (k>>4) <<endl; // 26
unsigned j=((k>>4)& ~(~0<<3));
// j = 26 & 7

// j = 11010 & 00111

cout<<j<<endl;
return 0;
}

看看这个,加了调试语句和注释,结果自然是2

~(~0<<3)这部分:
0取反后所有位全是1,左移三位,最低三位(小端机器)出现3个0,结果就是4294967288 = 2^32 - 8(32位unsigned int)。最后取反得111,即十进制7

按照优先级 单步运算 不就看出来了

就是呀,&运算下来应该是0 或者1啊,怎么能是2呢
是编译器的事吧