免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 15690 | 回复: 11
打印 上一主题 下一主题

什么是幻数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-27 20:22 |只看该作者 |倒序浏览
在APUE I中的2.5节限制中:

有很多由实现定义的幻数和常数,其中有很多已被编写到程序中,或由特写的技术所确定.


什么是幻数啊?

论坛徽章:
0
2 [报告]
发表于 2007-02-27 20:25 |只看该作者
magic numbers
个人认为这里不如不译

论坛徽章:
0
3 [报告]
发表于 2007-02-27 21:24 |只看该作者
原帖由 eunyoo 于 2007-2-27 20:22 发表
在APUE I中的2.5节限制中:



什么是幻数啊?



magic number

编程时候随意使用一些数值常量, 使其他人维护代码时候难以理解其作用. 一般应该用宏定义&枚举定义来避免. 但有些个别时候也会使用

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
4 [报告]
发表于 2007-02-27 22:21 |只看该作者
比如 exec(2) 运行一个新程序时,它需要确定执行文件是a.out格式、elf格式 还是shell脚本,那么就需要一个幻数。 这些magic number是规范规定的,通常保存在格式头里面。

也有一些幻数是有其数学背景的,比如0.618作为黄金分割,3.1415作为圆周率。
程序中也有不少幻数是作为最优参数出现。

magic number和 jiffies,墒 这些东西有点像,反正就是那么个东西,具体是什么,每个行业的理解不同。

[ 本帖最后由 gvim 于 2007-2-27 22:28 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-02-27 22:37 |只看该作者
原帖由 Edengundam 于 2007-2-27 21:24 发表



magic number

编程时候随意使用一些数值常量, 使其他人维护代码时候难以理解其作用. 一般应该用宏定义&枚举定义来避免. 但有些个别时候也会使用


thx
差不多明白了...

最后一句:幻数在有些个别时候也会使用,是由于不得不用的原因,还是只是习惯问题?
这个我不太明白,可否请Edengundam兄讲解下?

论坛徽章:
0
6 [报告]
发表于 2007-02-27 22:40 |只看该作者
原帖由 gvim 于 2007-2-27 22:21 发表
比如 exec(2) 运行一个新程序时,它需要确定执行文件是a.out格式、elf格式 还是shell脚本,那么就需要一个幻数。 这些magic number是规范规定的,通常保存在格式头里面。

也有一些幻数是有其数学背景的,比如0 ...


老大...我指的就是计算机行业~~~~

这样的话,magic number是系统自已会生成并包含到程序(脚本)里面去的吧?

这样说对吗?

[ 本帖最后由 eunyoo 于 2007-2-27 22:45 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-02-27 22:47 |只看该作者
一样不起眼的东西,到了魔术师手上就会变得神奇。那是魔术师的秘密。
魔术师指的就是程序员,用的道具是代码,而魔术表演的精髓在于 magic numbers
用一个旧版本的浏览器登陆 Google Page Creator 看看会出现什么。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
8 [报告]
发表于 2007-02-27 22:55 |只看该作者
原帖由 eunyoo 于 2007-2-27 22:40 发表


老大...我指的就是计算机行业~~~~

这样的话,magic number是系统自已会生成并包含到程序(脚本)里面去的吧?

这样说对吗?


我知道你说的计算机行业。
我的意思是这些个名词用的十分广,指代的概念也很繁杂,体会下意思就可以了,具体谁也不好说。

比如,你的身份证号码,你要说它是幻数有什么不可以吗?它用来在中国范围内唯一识别你。

[ 本帖最后由 gvim 于 2007-2-27 22:57 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-02-27 23:45 |只看该作者
原帖由 eunyoo 于 2007-2-27 22:37 发表


thx
差不多明白了...

最后一句:幻数在有些个别时候也会使用,是由于不得不用的原因,还是只是习惯问题?
这个我不太明白,可否请Edengundam兄讲解下?



比如一天有多少小时可以, 等等...这是一类
#define HOURS_PER_DAY 24
有些更偏重于使用枚举, 譬如网络通信使用的认证方法
enum method {
os_authentication,
pam,
kerberos
};等等

还有很个别情况下比如我要申请一个buffer打印一个int32的数值
这个int32的长度10个字节之内, 加上个null的话11位...这个时候可能会
char buf[32]; // or malloc
虽然申请大些, 但是申请这样的长度看起来更合适(2的指数).
还有一些很特殊的地方, 可能是编写偷懒之类的(postgre sql代码有这种情况, 很少), 譬如某些日志文件名是20个数字, 那么处理这个文件名时候, 可能就会直接用20..虽然这样做并不好.

尽可能不使用magic number在编程时候很重要.

magic number就是直接使用数值来工作的. 譬如最早UNIX的文件描述符: 0, 1, 2. STDIN, STDOUT, STDERR就是他们的名字, 用后面的更具有可读性, 而且每次都使用数值还容易出错. 很多人申请1024的buffers, 但是操作时候访问1223这个问题, 显然是一个不小心的错误, 后果确实相当恶劣的.

magic number的处理可以做为一个程序员基本素质的考察点...^^..~~

[ 本帖最后由 Edengundam 于 2007-2-27 23:46 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-02-28 08:10 |只看该作者
凡说不清道不明的东西,皆可谓之幻。楼上各位视角不同而已。

程序源代码中的立即数,除了作者本人,大多数情况下其它人都不知其所以然,故谓之幻数。

可执行文件首部用于区分格式的数字,只是一个”位模式”而已,理解成由bit组成的“图案”也行,至于这个图案是用0101还是1010,谁都不知道也没必要非得给出个答案,故亦谓之幻数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP