找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 910|回复: 3
打印 上一主题 下一主题
收起左侧

关于C语言数组左移代码请教,谢谢

[复制链接]
跳转到指定楼层
楼主
ID:734017 发表于 2022-11-13 23:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码网上抄录。红字位置不太明白,谢谢指导


#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;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:491577 发表于 2022-11-14 09:17 | 只看该作者
这个数据移动是:左移时如果最高位是1就把这个1移到最低位,不丢弃最高位。红色部分有问题,应该改成:
   if(i < len && str[ i] & MSB) //判断最高位是否为1
        {            
            str[i] = (str[i] <<1)| LSB;//把最高位的1移到最低位。
            i++;//处理完,自增1位。
        }
回复

使用道具 举报

板凳
ID:734017 发表于 2022-11-14 18:28 | 只看该作者
hhh402 发表于 2022-11-14 09:17
这个数据移动是:左移时如果最高位是1就把这个1移到最低位,不丢弃最高位。红色部分有问题,应该改成:
   ...

最主位1代表是,地址?变量?这里我是没搞懂的
回复

使用道具 举报

地板
ID:794544 发表于 2022-11-14 18:45 | 只看该作者

left_shift(x1, sizeof(x1)/sizeof(x1[0]));    这里可以代入是因为x1是数组名可以代表地址传参进入函数,后面sizeof(x1)/sizeof(x1[0]是代表数组的长度
我想知道整个数组按位左右移是把数组了里面的每个数据左右移一位,还是把整个数组当成一个数据整体往左右移一位?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表