向右转/我做错了什么?

Luk*_*hne 1 c bit-manipulation shift

不能正常工作,因为它没有设置MSB位正确.我正在使用metrowerks编译器.

//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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ric*_*ton 9

你可能想要"unsigned char*buffer;" 这会将零移位到顶部位而不是保留符号位.