| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:循环移位程序出来的值明显错误,但找不到错误。请各位多多指教。。。帮忙解 ...
只看楼主 加入收藏
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
结帖率:90%
收藏
已结贴  问题点数:19 回复次数:4 
循环移位程序出来的值明显错误,但找不到错误。请各位多多指教。。。帮忙解惑。。
循环移位程序写出来了。但就是和答案对不上。而自己的值明显是错。于是抄了书上的例题运行看看。可是例题的照搬照抄的,答案还是对不上。
不知道是编译系统的问题还是什么问题。。。请各位帮忙看看。。请多多指教。。。不胜感激。。。。。

#include<stdio.h>
#include<conio.h>
int main(void)
{
    unsigned a,b,c;
    int n;
    scanf("a=%o,n=%d",&a,&n);
    b = a << (16 - n);
    c = a >> n;
    c = b | c;
    printf("原值 = %o\n移动后的值 = %o\n",a,c);
    return 0;
}
/*
程序运行结果:
------------------------------

a=157653,n=3
原值 = 157653
移动后的值 = 3375275765   //这个值明显是错的。
/书上例题里移动后的值是75765。程序时照抄例题的,为什么答案会错。是编译系统的问题还是例题的问题???请各位帮忙解答。

------------------------------
*/上面是书上的例题,,,,,,,,,,,,,下面是自己的程序。

unsigned move(unsigned va,int n)
{
    int a,b,c;
    if(n > 0)
    {
        a = va << (16 - n);
        b = va >> n;
        c = a | b;
    }
    if(n < 0)
    {
        a = va >> (16 - n);
        b = va << n;
        c = a | b;
    }
    return(c);
}

int main(void)
{
    unsigned value,n,m;
    printf("请输入数据:");
    scanf("%o",&value);
    printf("请输入要移动的位数:");
    scanf("%d",&n);
    m = move(value,n);
    printf("原值 = %o\n循环移动后的值 = %o",value,m);
    printf("\n");
    getch();
    return 0;
}
/*
程序运行结果:
---------------------------------------------------

请输入数据:145432
请输入要移动的位数:3
原值 = 145432
循环移动后的值 = 3130654543 //这值也明显是错的。。。但就是找不出哪里错了。请各位多多指教。。。

---------------------------------------------------
*/


搜索更多相关主题的帖子: 不胜感激 include return 马丁靴 
2015-11-29 19:13
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
是不是我的编辑系统整型是4个字节的。而书本上的是2个字节的。所以才把数字变的比原来大很多。
2015-11-29 19:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
你教我怎么循环移动3位了?

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2015-11-29 22:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:14 
假如你的平台中 unsigned 占 2bytes,那么:
11011111 10101011 a (8进制的157653)
01100000 00000000 b
00011011 11110101 c
01111011 11110101 c (8进制的75765)

假如你的平台中 unsigned 占 4bytes,那么:
00000000 00000000 11011111 10101011 a (8进制的157653)
00011011 11110101 01100000 00000000 b
00000000 00000000 00011011 11110101 c
00011011 11110101 01111011 11110101 c (8进制的3375275765)
2015-11-30 08:45
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
谢谢。
2015-12-02 11:18
快速回复:循环移位程序出来的值明显错误,但找不到错误。请各位多多指教。。。帮 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042608 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved