bit移位相加的問題

ernst20020530 2009-07-16 02:34:55
int convert(unsigned char* c1,unsigned char* c2,unsigned char* c3,unsigned char* b1,unsigned char* b2);

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char ucs2[]={0x6c,0x49};
unsigned char utf8[3];
convert(utf8,utf8+1,utf8+2,ucs2,ucs2+1);

return 0;
}

int convert(unsigned char* c1,unsigned char* c2,unsigned char* c3,unsigned char* b1,unsigned char* b2)
{
unsigned char s1,s2,s3,s4;
s4=(*b2)&0x3f;
s3=(*b2)&0xc0;
s2=(*b1)&0x0f;
s1=(*b1)&0xf0;
*c3=0x80+s4;
unsigned char temp1=s3>>6;
unsigned char temp2=s2<<2;
unsigned char temp3=s1>>4;
*c2=0x80+s2<<2+s3>>6;
*c1=0xe0+s1>>4;
return 0;
}

把0x6c,0x49移位,得到的結果應該是E6 B1 89,但是為什麽得到的結果是14 08 89,
執行到*c2=0x80+s2<<2+s3>>6;的時候就出問題了,等號右邊的都對,但是為什麽c2加出來的結果是08 而不是B1呢
...全文
83 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
amossavez 2009-07-16
  • 打赏
  • 举报
回复
指针和引用在堆大数据结构时使用会比直接传效率高
xxjjs 2009-07-16
  • 打赏
  • 举报
回复
c++ 用引用啊
速度很快,和指针一样,实际上看汇编就是用的指针
而且使用方便,和传值一样使用
如果不改变,加const修饰
ernst20020530 2009-07-16
  • 打赏
  • 举报
回复
樓上的主意不錯,不知道其他人還有什麽建議嗎?
brookmill 2009-07-16
  • 打赏
  • 举报
回复
对于char、int之类的简单类型,传指针和传值的速度应该是一样的。
对于比较大的结构、类,用指针或者引用,速度会快很多。

我个人的习惯,对于简单类型,只有在需要修改实参的时候才传指针,比如楼主的c1。
其它情况,传值能实现的就不传指针。
比如楼主的b1,传指针和传值都可以达到目的,那就传值。传指针增加了出错的可能性,而且可能对其它读代码的人有误导。
ernst20020530 2009-07-16
  • 打赏
  • 举报
回复
什麽時候用指針傳,什麽時候用值複製上去,有什麽具體說法嗎?
ernst20020530 2009-07-16
  • 打赏
  • 举报
回复
用指針傳值速度快吧
brookmill 2009-07-16
  • 打赏
  • 举报
回复
楼主的这个convert函数,并没有修改b1、b2的值,貌似没必要用指针传参吧。
能不能改成这样
convert(utf8,utf8+1,utf8+2,ucs2[0],ucs2[1]);

return 0;
}

int convert(unsigned char* c1,unsigned char* c2,unsigned char* c3,unsigned char b1,unsigned char b2)
{
unsigned char s1,s2,s3,s4;
s4= b2 &0x3f;
s3= b2 &0xc0;
s2= b1 &0x0f;
s1= b1 &0xf0;
brookmill 2009-07-16
  • 打赏
  • 举报
回复
位运算的优先级都很低。
我的一个工作了好几年的同事曾经写过这么一行代码
if (a&mask == b)
本来想取a中的某几位然后和b比较,想不到编译器把它理解成了 if (a& (mask == b) )
brookmill 2009-07-16
  • 打赏
  • 举报
回复
拿不准优先级的就尽量都加括号吧
ernst20020530 2009-07-16
  • 打赏
  • 举报
回复
知道為什麽了,>> <<的優先級太低了,先做加法再移位了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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