标签: magic-numbers

定义0和1的常量

我想知道其他人是否认为做这样的事情是多余的......

const double RESET_TIME = 0.0;
timeSinceWhatever = RESET_TIME;
Run Code Online (Sandbox Code Playgroud)

而不仅仅是做

timeSinceWhatever = 0.0;
Run Code Online (Sandbox Code Playgroud)

您是否找到了第一个帮助提高可读性的示例?该论点归结为使用幻数,而0和1被认为是规则的"例外",我总是认为这些异常仅适用于初始化变量或索引访问.当数字有意义时,它应该有一个附加于其含义的变量.

我想知道这个假设是否有效,或者只是为了赋予0一个命名常量是多余的.

magic-numbers

3
推荐指数
1
解决办法
212
查看次数

这些被认为是魔术数字吗?

我刚刚完成了为编程课程编写程序,我想避免使用魔术数字,所以这是我的问题:

在下面的函数中,我的数组索引器是否会被视为幻数?

码:

string CalcGrade(int s1, int s2, int s3, double median)
{
const int SIZE = 23;
const int LETTER_GRADE_BARRIERS[SIZE] = { 400, 381, 380, 361, 360, 341, 340, 321, 320, 301, 300, 281, 280, 261, 260, 241, 240, 221, 220, 201, 200, 181, 180 }; 
double finalGrade;
string letterGrade;

finalGrade = s1 + s2 + s3 + median;

if (finalGrade >= LETTER_GRADE_BARRIERS[1] && finalGrade <= LETTER_GRADE_BARRIERS[0])
{
    letterGrade = "A";
}
else if (finalGrade >= LETTER_GRADE_BARRIERS[3] && finalGrade …
Run Code Online (Sandbox Code Playgroud)

c++ arrays magic-numbers

3
推荐指数
1
解决办法
684
查看次数

Excel NORMDIST函数的C++实现中的幻数

在寻找Excel NORMDIST(累积)函数的C++实现时,我在网站上找到了这个:

static double normdist(double x, double mean, double standard_dev)
{
    double res;
    double x=(x - mean) / standard_dev;
    if (x == 0)
    {
        res=0.5;
    }
    else
    {
        double oor2pi = 1/(sqrt(double(2) * 3.14159265358979323846));
        double t = 1 / (double(1) + 0.2316419 * fabs(x));
        t *= oor2pi * exp(-0.5 * x * x) 
             * (0.31938153   + t 
             * (-0.356563782 + t
             * (1.781477937  + t 
             * (-1.821255978 + t * 1.330274429))));
        if (x >= 0) …
Run Code Online (Sandbox Code Playgroud)

c++ math excel function magic-numbers

3
推荐指数
1
解决办法
2876
查看次数

避免魔术字符串和数字

我正在研究过去几年由各种程序员编辑过的应用程序,我偶然发现了使用String Literals访问MenuItems的问题.

例如:在很多地方都有类似的代码

mainMenu.MenuItems[1].MenuItems[0].Visible=true;
Run Code Online (Sandbox Code Playgroud)

要么

mainMenu.MenuItems["View"].MenuItems["FullScreen"].Visible=true;
Run Code Online (Sandbox Code Playgroud)
  1. 如何更改用于标识MenuItem的字符串并捕获它用于访问的所有位置?菜单和菜单项被声明为公共,并在整个大型应用程序中使用

  2. 什么是防止使用这些魔术索引的正确方法.每次添加新项目或更改名称时,我都认为有些事情被破坏了.

PS我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对.但这仍然不会迫使其他开发人员使用我的实现,也不是问题2的最优雅的解决方案

c# enums magic-numbers menuitem

3
推荐指数
1
解决办法
4304
查看次数

使用变量与幻数的性能影响

我经常对此感到困惑.我一直被教导用经常使用变量或常量命名的数字,但如果它降低了程序的效率,我还应该这样做吗?下面是一个例子:

private int CenterText(Font font, PrintPageEventArgs e, string text)
    {
        int recieptCenter = 125;
        int stringLength = Convert.ToInt32(e.Graphics.MeasureString(text, font));
        return recieptCenter - stringLength / 2;
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码使用的是命名变量,但运行速度比这段代码慢:

private int CenterText(Font font, PrintPageEventArgs e, string text)
    {
        return 125 - Convert.ToInt32(e.Graphics.MeasureString(text, font) / 2);
    }
Run Code Online (Sandbox Code Playgroud)

在这个例子中,执行时间的差异是最小的,但是在更大的代码块中呢?

c# magic-numbers

3
推荐指数
2
解决办法
858
查看次数

如何在java中验证图像头

我有一个可用于上传文件的网页.现在我需要检查图像文件类型是否正确类型,如png,jpg,jpeg,gif

我正在使用请求附带的mimeType,但如果我正在加载重命名为.jpg文件的.txt文件,那么也是mime-type它显示图像/ jpg,基本上我不想上传这些文件.现在我我想确保没有人能够上传在.jpg/.png中重命名的.txt文件....

作为参考,我在这里放一段代码:

  //storing images into bytearray.

byte[] bFile = baos.toByteArray();

if((bFile [i] & 0xFF) == 0xFF && (bFile[i+1] & 0xFF) == 0xD8 && (bFile[bFile.length -    2] & 0xFF) == 0xFF  && (bFile[bFile.length - 1] & 0xFF) == 0xD9) 
                    {
                       System.out.println("is Image");
                    }
Run Code Online (Sandbox Code Playgroud)

以上行只会检查jpeg类型,但我想检查文件扩展名的其他图像标题有人可以指出究竟需要做什么来检查其他图像类型?

谢谢

java image file magic-numbers mime-types

3
推荐指数
1
解决办法
2951
查看次数

什么是Webkit中使用的0xbbadbeef?

使用Webkit时遇到错误,指针设置为0xbbadbeef.什么是BadBeef在Webkit中使用?

memory pointers webkit magic-numbers

3
推荐指数
1
解决办法
1837
查看次数

如何确定一个字节中的一个字节是否为空

我正在从 glibc 读取“strlen”源代码,开发人员发现加快它的技巧是读取 n 个字节,其中 n 是一个长字的大小,而不是在每次迭代时读取 1 个字节。

我假设一个长字有 4 个字节。

棘手的部分是函数读取的每个 4 字节的“块”都可以包含一个空字节,因此在每次迭代时,函数必须检查块中是否有空字节。他们这样做

if (((longword - lomagic) & ~longword & himagic) != 0) { /* null byte found */ }
Run Code Online (Sandbox Code Playgroud)

哪里longword是数据块,himagiclowmagic是神奇的值,定义为:

himagic = 0x80808080L;
lomagic = 0x01010101L;
Run Code Online (Sandbox Code Playgroud)

这是对这些值的评论

/* Bits 31, 24, 16, and 8 of this number are zero.  Call these bits
 the "holes."  Note that there is a hole just to the left of
 each byte, with an extra at …
Run Code Online (Sandbox Code Playgroud)

c magic-numbers strlen

3
推荐指数
1
解决办法
1986
查看次数

许多魔术数字

我有一个项目,我将消息从一种格式转换为另一种格式.消息由id标识.我有一个带有一种格式的id的MappingTable和另一种格式的相应id.

例如:2000 = 153

id是整数

我通过以下方式添加所有这些内容:

this.AddMappingEntry(2400, 2005, true, false);
Run Code Online (Sandbox Code Playgroud)

此方法将映射条目添加到映射列表中.我可以通过linq过滤列表,这样我就可以在收到值为2400的消息时找到正确的映射.

自项目启动以来,它已经发展了很多,这导致了许多重构和许多具有特殊行为的id.我必须控制消息是否是特殊类型.

if(message.id == 153)
{
    //special behavior
}
Run Code Online (Sandbox Code Playgroud)

我该怎样处理这个最优雅的?我应该使用许多描述消息类型的常量还是有另一种更优雅的方式?

编辑:

我改回了这个问题.我有头记录和子记录.但是整个守则都使用了这些记录的Id.由于有大约200个不同的Id,我想知道我应该用这些神奇的数字做什么.我写的工具是转换器.

结构如下

     +------+         +-------------+      +---------+
     | DAL  +-------> |  CONVERTER  +----> | WRITER  |
     +------+         +-------------+      +---------+
Run Code Online (Sandbox Code Playgroud)

Converter类看起来大致如此

    +------------+
    |BaseClass   |
    +-----+------+
          ^
          |
    +-----+------+
    |BaseRecord  +^-------------+----------------------+
    +------+-----+              |                      |
           ^                    |                      |
           |                    |                      |
    +------+-----+      +-------+--------+     +-------+--------+
    | HeadRecord |      |   RecordType1  |     |   RecordType2  |
    +------------+      +----------------+     +----------------+
Run Code Online (Sandbox Code Playgroud)

BaseRecord扩展了Baseclass,所有其他类扩展了BaseRecord.总共我有5个Record类型,其中recordId为1-5.在这条记录中有几个subrecordId(~50),它们仅用于在写入过程之后分别识别写入者后面的记录.

问题是有些记录从不同的字段中读取了一些值,而另一些记录则导致我需要识别记录的一些特殊情况.

这导致了问题: 如果我在我的班级和转换器中使用它们,我有许多神奇的数字,没人知道它们是什么.我如何避免这些神奇的数字?我很开心,如果我使用那些,我的课程中会有50多个const值.有没有办法避免魔术数字和一大堆const值?对此有什么正确的重构?

c# linq magic-numbers

3
推荐指数
1
解决办法
899
查看次数

如何从java中的文件中获取幻数

我有来自 UploadedFile 按钮的文件,我想使用幻数打印扩展文件,

我的代码:

UploadedFile file = (UploadedFile)valueChangeEvent.getNewValue();
byte[] fileByteArray = IOUtils.toByteArray(file.getInputStream());
Run Code Online (Sandbox Code Playgroud)

注意:Mime 类型和内容文件(来自文件和来自文件名)与幻数不同(幻数来自输入流的第一个字节)

我该怎么做?

java file-extension magic-numbers

3
推荐指数
2
解决办法
7763
查看次数

标签 统计

magic-numbers ×10

c# ×3

c++ ×2

java ×2

arrays ×1

c ×1

enums ×1

excel ×1

file ×1

file-extension ×1

function ×1

image ×1

linq ×1

math ×1

memory ×1

menuitem ×1

mime-types ×1

pointers ×1

strlen ×1

webkit ×1