标题:
关于C语言数组左移代码请教,谢谢
[打印本页]
作者:
happy2058
时间:
2022-11-13 23:47
标题:
关于C语言数组左移代码请教,谢谢
代码网上抄录。红字位置不太明白,谢谢指导
#include <stdio.h>
#define MSB 0x80
#define LSB 0x01
// 数组数据整体按位左移一位
int left_shift(unsigned char *str, int len)
{
int i;
for(i = 1; i <= len; i++)
{
str[i-1] = str[i-1] << 1;
if(i < len && str[ i] & MSB)
[ i]
{
str[i-1] = str[i-1] | LSB;
}
}
return 0;
}
// 数组数据整体按位右移一位
int right_shift(unsigned char *str, int len)
{
int i;
for(i = len-1; i >= 0; i--)
{
str[ i] = str[ i] >> 1;
if(i > 0 && str[i-1] & LSB)
{
str[ i] = str[ i] | MSB;
[ i][ i]
}
}
return 0;
}
int main(void)
{
int i;
unsigned char x1[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned char x2[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
left_shift(x1, sizeof(x1)/sizeof(x1[0])); 这里为什么可以代入???
right_shift(x2, sizeof(x2)/sizeof(x2[0]));
for(i = 0; i < sizeof(x1)/sizeof(x1[0]); i++)
printf("%02x ", x1[ i]);
printf("\n");
for(i = 0; i < sizeof(x2)/sizeof(x2[0]); i++)
printf("%02x ", x2[ i]);
return 0;
}
作者:
hhh402
时间:
2022-11-14 09:17
这个数据移动是:左移时如果最高位是1就把这个1移到最低位,不丢弃最高位。红色部分有问题,应该改成:
if(i < len && str[ i] & MSB) //判断最高位是否为1
{
str[i] = (str[i] <<1)| LSB;//把最高位的1移到最低位。
i++;//处理完,自增1位。
}
作者:
happy2058
时间:
2022-11-14 18:28
hhh402 发表于 2022-11-14 09:17
这个数据移动是:左移时如果最高位是1就把这个1移到最低位,不丢弃最高位。红色部分有问题,应该改成:
...
最主位1代表是,地址?变量?这里我是没搞懂的
作者:
z1234561
时间:
2022-11-14 18:45
left_shift(x1, sizeof(x1)/sizeof(x1[0]));
这里可以代入是因为x1是数组名可以代表地址传参进入函数,后面sizeof(x1)/sizeof(x1[0]是代表数组的长度
我想知道整个数组按位左右移是把数组了里面的每个数据左右移一位,还是把整个数组当成一个数据整体往左右移一位?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1