位演算的小程序求解
位运算的小程序求解
这是一个位运算的小程序,有几点不明白。
z=~0;
z=(z>>n1)&(z<<(16-n2));
z=value&z;
z=z>>(16-n2);
谁能把上面四句给我解释一下呢,新手感觉理解不了
------解决方案--------------------
位预算符而已!
参考下
http://blog.****.net/heiniaoyuyouling/article/details/4696586
#include<iostream>
unsigned getbits (unsigned value,int n1,int n2);
int
main()
{
unsigned a;
int n1,n2;
printf("inter number\n");
scanf("%o",&a);
printf("%d \n",a);
printf("inter weishu\n");
scanf("%d %d",&n1,&n2);
printf("%o\n",getbits(a,n1-1,n2));
return 0;
}
unsigned getbits(unsigned value,int n1,int n2)
{
unsigned z;
z=~0;
z=(z>>n1)&(z<<(16-n2));
z=value&z;
z=z>>(16-n2);
return(z);
}
这是一个位运算的小程序,有几点不明白。
z=~0;
z=(z>>n1)&(z<<(16-n2));
z=value&z;
z=z>>(16-n2);
谁能把上面四句给我解释一下呢,新手感觉理解不了
------解决方案--------------------
位预算符而已!
z=~0;
//~一元运算符, 0000 0000对数据取反1111 1111
z=(z>>n1)&(z<<(16-n2));
//把z先右移n1位和左移16-n2位的结果取与运算,
//(具体的是不是这样得实践下,这里我一般会分开操作)
z=value&z;
//z和value 与运算
z=z>>(16-n2);
//把z右移16-n2位,结果赋值给z
参考下
http://blog.****.net/heiniaoyuyouling/article/details/4696586