计算机中魔数magic number的概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjianno2/article/details/48859813

1.魔数

      magic number一般是指硬写到代码或文件中的整型常量,数值是编程者自己指定的,其他人不知道数值有什么具体意义。另外,magic number有时也表示初学者不定义常量名直接写数的不良习惯。


2.使用魔数的举例

(1)linux的ELF格式文件的前四个字节分别是依次是0x7f、'E'、'L'、'F'的ASCII码

(2)约翰·卡马克 (John D. Carmack)的著名的“速算平方根倒数”的算法

float Q_rsqrt( float number )
{
        long i;
        float x2, y;
        const float threehalfs = 1.5F;
 
        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;                       // evil floating point bit level hacking(对浮点数的邪恶位级hack)
        i  = 0x5f3759df - ( i >> 1 );               // what the fuck?(这他妈的是怎么回事?)
        y  = * ( float * ) &i;
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration (第一次牛顿迭代)
//      y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed(第二次迭代,可以删除)
 
        return y;
}
这段代码用于速算平方根倒数(浮点开放)的近似,在精度损失可以接受的前提下比C库里的标准计算方法((float)(1.0/sqrt(x))要快上近四倍。代码中的0x5f3759df就是一个业界非常有名的Magic Number,人们一般认为它是由卡马克发明引入的,但被本人否认,其真正来源仍然是个谜。

(3)linux中file命令

linux中file命令用来判断一个文件内容的类型,比如是二进制文件、文件文件、shell脚本等等。    file命令判断一个文件的类型,除了从文件系统、编程语言语法格式角度上判断外,还会从一个文件的魔数来判断文件的内容的类型。


展开阅读全文

没有更多推荐了,返回首页