搜索
bottom↓
回复: 2

发现傻孩子的《深入浅出AVR单片机》书上有点小错误,不.....

[复制链接]

出0入0汤圆

发表于 2012-11-9 22:58:04 | 显示全部楼层 |阅读模式
发现傻孩子的《深入浅出AVR单片机》书上有点小错误,不知道是不是我理解有错。
在书上422页,利用求余算法将不同情况下的n限定在指定的范围内,实现环形结构。如果在这里的n值的取值范围是上文的两个互逆序数组:0,1,2,...9  和 0,9,8,7...1
那么在这里的代码貌似有错误。我把代码放在VS2010上运行

#include <stdio.h>

#define BIT(i)              (1 << i)
#define CIRCLE_SIZE_BIT        3
#define CIRCLE_SIZE         BIT(CIRCLE_SIZE_BIT)
#define MOD(Value)          ((Value) & (BIT(CIRCLE_SIZE_BIT) - 1))

void main()
{
        char n;
        while(1)
        {
                scanf("%d",&n);
                n = (n >= 0)? MOD(n) : MOD(MOD(n) + (CIRCLE_SIZE));
                printf("i = %d",n);
    }
}





由此可见 n的范围始终限制在0~7 和7~0之间

不知是不是我理解有错,因为在研究傻孩子介绍的队列,也是一知半解。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入296汤圆

发表于 2012-11-10 14:11:47 | 显示全部楼层
本帖最后由 Gorgon_Meducer 于 2012-11-10 14:15 编辑

代码是没有错的,你遇到的问题是你不了解整形变量在内存中的表现形式:
1、正数如何表示
2、负数如何表示
当你了解这两点以后,这个结果你就不会奇怪了。

另外,你要注意上下文,这个技术是在介绍环形队列时候引入的,那么环形队列中下标会出现负数么?答案是否定的。
所以,考察应用范围,你扩大了测试的范围也是不合适的。

最后,当你还不确认的时候,直接下结论会闹笑话的……这种情况下,用不太确定的语气会好一点,你觉得呢?

出0入0汤圆

 楼主| 发表于 2012-11-11 12:31:52 | 显示全部楼层
呵呵,谢谢解答!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 13:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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