c++编程输出第x位

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:29:15
对于任意给定long int变量a,试将其中第x位(从低到高)的值输出。提示:根据位与操作的特性(1&1=1,0&1=0)位与&, 右移>>
可不可以给我解释下算法!
为什么这么做!
这题不给提示我会做就是取模后再除!
在它给的用位运算的方法我就不知道该怎么做了!
因为用位运算只用于二进制数,那么怎么能定位到第x位是第几个二进制数?

t = ( a&(1<<x) )>>x;
cout<<t<<endl;

bool fun(long int a,int x)
{
a=a>>x;
return (a&1);
}

">>"右移操作本身就是专门对应2进制的呀.右移一次相当于整除2一次.右移n次后,该数的最低位就相当于原数的第n位.
比如说48吧 ,2进制=110000 那么我右移4次 他就变成了11,这时我只要用他和1进行AND 操作,结果是0,表示最低位为0,结果是1,不就是该位非0了嘛..

for(x=0;x<32;x++)
{
printf("line %d: %X\n", x, (a>>x)&0x01);
}

x位是十进制把,上面的哥们输出的二进制位;
如果十进制要用位操作输出位的话比较复杂,需要转换
建议你直接这样
for(int i=1;i<=x;i++)
a=a/10; //找到x位
if(a!=0)
cout<<a<<endl;

else cout<<"a不存在x位"<<endl
希望对你有帮助

一个int有4个字节,所以我用char 1个字节来说明下吧,一个字节是8位
假设一个char = 11111010
一共8位,你要从低到高输出,你就右移,成了1111101,最右边一位没了,因为是无符号位的所以左边补个0,成了01111101,再右移就是00111110,一直这样下去,&就是一位位比对假设我们只用1个字节,1=00000001
00000001
&
11111010
=
00000000(只要两个数是位子上有个0就是0)

000