一个bit of A byte操作,求分析

PurifiedWaters 2009-04-22 10:45:01
1 Byte ,进行bit级别倒序操作,(例如0x01倒序输出是0x80),本人代码如下:总是出问题,求大牛们给分析下,出错在哪里?是取值问题还是定义问题?网上搜索了下,没有找出结果,列出如下,(本人环境VC2K5),谢谢,(分析错误即可,如果能代码出来是好,能给出了思想或者算法的更欢迎~先谢谢喽),

#include<iostream>
using namespace std;
int main()
{
char nIn,nTemp;
cout<<"Before:"<<endl;
cin>>nIn;
for(int i=0;i<8;i++)
{
nTemp|=(((nIn>>(7-i))&0x01)<<(7-i));

}
cout<<"After:"<<nTemp;
return 0;

}

...全文
141 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
PurifiedWaters 2009-04-24
  • 打赏
  • 举报
回复
谢谢几位大牛们
我看你有戏 2009-04-23
  • 打赏
  • 举报
回复


#include<iostream>
using namespace std;
typedef unsigned char byte;

void ShowBit(byte x, int n)
{
if (--n)
{
ShowBit(x>>1, n);
}
//printf("%d", x%2);
cout<<x%2;
}


void ReverseBit(byte* pValue)
{
byte bytmp = * pValue;
byte byvalue = 0;
int n = 0;
while(n<8)
{
if(bytmp & (0x1<<n) )
{
byvalue|=0x1<<(7-n);
}
n++;
}
*pValue = byvalue;
}

int main()
{
char nIn=0,nTemp=0;
cout<<"Before:"<<endl;
cin>>nIn;
ShowBit(nIn,8);

cout<<endl;

/*for(int i=0;i<8;i++)
{
nTemp|=(((nIn>>(7-i))&0x01)<<(7-i));

}*/

ReverseBit((byte*)&nIn);
cout<<"After:"<<endl;
ShowBit(nIn,8);
return 0;
}

sytstarac 2009-04-22
  • 打赏
  • 举报
回复
int main(int argc,char**argv)
{
const unsigned int bit_num=8*sizeof(int);
int nIn,nTemp =0;
cout <<"Before:" <<endl;
cin>>nIn;
bitset<8*sizeof(int)> bin_nIn(nIn);
cout<<"before:"<<bin_nIn<<endl;
for(int i=0;i <bit_num;i++)
{
nTemp|=(((nIn>>(bit_num-1-i))&0x01) <<(i));

}
bitset<8*sizeof(int)> bin_nTemp(nTemp);
cout<<"after:"<<bin_nTemp<<endl;
return 0;
}
sunzhenyi 2009-04-22
  • 打赏
  • 举报
回复
首先,你这个没能实现倒叙输出,原因:右移之后,跟0x01与了之后,有左移了同样的位置
其次,“nTemp|=”前提是nTemp给赋初值0x00

以下是我修改的:

#include<iostream>
using namespace std;
int main()
{
char nIn,nTemp;
cout<<"Before:"<<endl;
cin>>nIn;
char *p = &nIn;
nTemp = 0x00;
p = &nTemp;
for(int i=0;i<8;i++)
{
nTemp|=(((nIn>>(7-i))&0x01)<<(i));

}
cout<<"After:"<<nTemp;

return 0;

}
goodname 2009-04-22
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
int nIn,nTemp =0;
cout<<"Before:"<<endl;
cin>>nIn;
for(int i=0;i<8;i++)
{
nTemp|=(((nIn>>(7-i))&0x01)<<(i));

}
cout<<"After:"<<nTemp;
return 0;

}
PurifiedWaters 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
nTemp没有初始化
[/Quote]
先谢谢你的热心回帖,呵呵,
不过,结果不对,好像不是这个原因哦~这个我试验过滴

#include<iostream>
using namespace std;
int main()
{
char nIn,nTemp;
cout<<"Before:"<<endl;
cin>>nIn;
for(int i=0;i<8;i++)
{
nTemp|=(((nIn>>(7-i))&0x01)<<(7-i));

}
cout<<"After:"<<nTemp;
return 0;

}

输出结果如下
Before:
1
After:1
Press any key to continue.
lijinfenghust 2009-04-22
  • 打赏
  • 举报
回复
nTemp没初始化 ,而且算法好像也不对

nTemp =0;

nTemp|=(((nIn>>(7-i))&0x01)<<i);
goodname 2009-04-22
  • 打赏
  • 举报
回复
nTemp没有初始化

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧