首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向右移动/我做错了什么?

向右移动/我做错了什么?
EN

Stack Overflow用户
提问于 2009-12-15 02:20:54
回答 2查看 756关注 0票数 1

没有按照预期工作,因为它没有正确设置MSB位。我使用的是metrowerks编译器。

代码语言:javascript
复制
//shifting right 5 characters
char * buffer;
buffer=global_buffer;
for(i=0;i<5;i++) //shift right for 1;
{
    buffer[17-i]=(buffer[17-i]>>1)|(buffer[17-i-1]<<7);
}

编辑输入缓冲区(就在for循环之前) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x2F,0xA0,0xC6,0x9D

我得到了for循环0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x17,0xD0,0xE3,0xCE

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-15 02:25:28

您可能需要"unsigned char *buffer“;这将把零移位到最高位,而不是保留符号位。

票数 9
EN

Stack Overflow用户

发布于 2009-12-15 02:56:42

“它不能正确设置MSB位”。

C标准说:

6.5.7/5 ...如果E1具有带符号的类型和负值,则结果值由实现定义。

请参阅此草案,例如:http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

大概char是在编译器上签名的,所以您应该检查编译器文档,看看MSB的正确值是什么。以及所有其他部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1902572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档