C++:若有char x=15,使得x的第0位为0(即二进制的最右边的那一位)为0,其余位保持不变的赋值表达式是什么

答案:x=x & ~1 (其中1是由pow(2,0)算出来的)
这个答案什么意思 来解释一下~~谢谢
如果 第1 位求反 其余不变 要怎么列式子 ~也说下 写了。

~是按位取反,1在32位机器上表示成二进制是:
00000000 00000000 00000000 00000001
这样,按位取反的意思就是,0变成1,1变成0,~1就是:
11111111 11111111 11111111 11111110
然后x & ~1中的&符号是按位与符号,就挨个二进制位跟上面的~1进行与运算,与运算的特点是,
跟1与不变,跟0与就变成0。这样的话,x 和上面的~1按位与之后,只有最右边的一位变成了0,
而其他的都不变

明白了吧:)追问

恩 是这样 如果 要倒数第二位 求反呢 0.0? 该取几,第三位 呢 。。有什么规律嘛 谢谢

追答

如果要求倒数第二位变成0,其他的不变,就让x跟
11111111 11111111 11111111 11111101
进行按位与呗
按位取反之后就是
00000000 00000000 00000000 00000010
即 1 向左移动一位,就是 1 << 1
如果第三位就是 1 << 2
如果第四位就是 1 << 3

如果要让第n(n是2到16之间的数)位变成0,其他的不变就这样:
x = x & ~(1 << (n-1) );

这样就OK了呗 :)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
#include<iostream>
using namespace std;
int main()
{
int n;
cout<<"input:";
cin>>n;
for(int i=0;n>0;i++,n/=2)
{
if(i!=0)
{
if(n%2==1)
cout<<','<<i;
continue;
}
cout<<i;
}

return 0;
}
第2个回答  2011-07-01
#include<iostream>
using namespace std;
int main()
{
int n;
cout<<"input:";
cin>>n;
for(int i=0;n>0;i++,n/=2)
{
if(i!=0)
{
if(n%2==1)
cout<<','<<i;
continue;
}
cout<<i;
}

return 0;
}
第3个回答  2011-07-01
~1 -----> FFFE,
相似回答