单片机 位移

[复制链接]
1711|12
 楼主| lilipeeeee 发表于 2015-5-21 10:12 | 显示全部楼层 |阅读模式
strcut
{
    int  tt;
    char ss;
} gg  中共40位,执行 gg.tt>>1;gg.ss>>1;   能实现40位整体右移一位吗??   
luofeng2g 发表于 2015-5-21 10:31 | 显示全部楼层
不行!这样只是对具体变量操作,最低位丢失。而且这个结构体貌似也不止40位吧
 楼主| lilipeeeee 发表于 2015-5-21 16:10 | 显示全部楼层
luofeng2g 发表于 2015-5-21 10:31
不行!这样只是对具体变量操作,最低位丢失。而且这个结构体貌似也不止40位吧 ...

int 32位  char 8位 。大笑能指点下咋样才能行呢
luofeng2g 发表于 2015-5-21 17:05 | 显示全部楼层
本帖最后由 luofeng2g 于 2015-5-21 17:09 编辑

strcut
{
    char ss;     int  tt;
} gg  这样才是40
你要什么效果?全体移位?
yewuyi 发表于 2015-5-21 17:11 | 显示全部楼层
8位MCU上,INT多数编译器都是识别为16位,长整型才是32位。

 楼主| lilipeeeee 发表于 2015-5-22 09:41 | 显示全部楼层
luofeng2g 发表于 2015-5-21 17:05
strcut
{
    char ss;     int  tt;

这样啊,是的 要实现连续 5字节  全部移位
luofeng2g 发表于 2015-5-22 09:45 | 显示全部楼层
这样多麻烦!换种思路,
 楼主| lilipeeeee 发表于 2015-5-22 11:15 | 显示全部楼层
luofeng2g 发表于 2015-5-22 09:45
这样多麻烦!换种思路,

把tt的最低位记下,赋给ss的最高位??????
luofeng2g 发表于 2015-5-22 11:17 | 显示全部楼层
这样当然可以,但是不麻烦么?可以换着思路啊,为什么一定要整个结构体移位?
 楼主| lilipeeeee 发表于 2015-5-22 11:20 | 显示全部楼层
luofeng2g 发表于 2015-5-22 11:17
这样当然可以,但是不麻烦么?可以换着思路啊,为什么一定要整个结构体移位? ...

要求实现一个40位移位寄存器的工作.:lol
luofeng2g 发表于 2015-5-22 11:24 | 显示全部楼层
lilipeeeee 发表于 2015-5-22 11:20
要求实现一个40位移位寄存器的工作.

好吧!你结构体那样声明应该是8个字节的,我后面那种才是5个字节的!具体看看结构体的size规则

评分

参与人数 1威望 +2 收起 理由
lilipeeeee + 2 很给力!

查看全部评分

 楼主| lilipeeeee 发表于 2015-5-22 11:26 | 显示全部楼层
luofeng2g 发表于 2015-5-22 11:24
好吧!你结构体那样声明应该是8个字节的,我后面那种才是5个字节的!具体看看结构体的size规则 ...

好的。谢谢
ayb_ice 发表于 2015-5-22 16:34 | 显示全部楼层
luofeng2g 发表于 2015-5-21 10:31
不行!这样只是对具体变量操作,最低位丢失。而且这个结构体貌似也不止40位吧 ...

strcut
{
    uchar         ss;     // 高8位
        ulong        tt;                // 低32位
}gg;

        bit b = 0;
        if(ss & 0x01){
                b = 1;
        }

        gg.ss >>= 1;
        gg.tt >>= 1;
        if(b){
                gg.tt |= (1ul<<31);
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部