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命令判断一个文件的类型,除了从文件系统、编程语言语法格式角度上判断外,还会从一个文件的魔数来判断文件的内容的类型。
解读编程中的魔数及其应用
本文深入探讨了编程中的魔数概念,包括其定义、使用场景和具体实例,如Linux ELF文件的魔数、John Carmack的速算平方根倒数算法以及Linux file命令的魔数判断机制。
8830

被折叠的 条评论
为什么被折叠?



