代码之家  ›  专栏  ›  技术社区  ›  Joshi Spawnbrood

放弃了位标志?[关闭]

  •  20
  • Joshi Spawnbrood  · 技术社区  · 17 年前

    我注意到很多开源项目不再使用位标志,即使它完全受Web公共编程环境(php/mysql)支持。 这是因为一些有效问题的“失败的实践”,或者只是因为许多PHP程序员不知道如何处理这种类型的实现?

    没什么太重要的,只是很好奇:) 谢谢大家

    9 回复  |  直到 15 年前
        1
  •  13
  •   Ed Guiness    17 年前

    我会毫不犹豫地说,每个技术职位都需要对按位运算有一个良好的理解。

    我有一则轶事间接地谈到了这个话题。

    2007年1月,我在印度科钦招聘了永久发展人员。由于我没有参与候选人的初步筛选,所以我不知道期望的标准是什么,所以我准备了一系列问题和主题,从简单理解二进制和十六进制到架构、设计和项目管理。

    当我和印度人力资源部的人讨论我的方法时,我(温和地)因为投得太低而受到指责。他明确表示,我关于赫克斯的问题可能会被认为是对候选人经验或教育的侮辱。

    但我在英国面试数百名候选人的经历使我坚信,不可能太低。我的观点是,如果一个候选人很明显是合格的,那么很容易调整讨论的水平。我从未有人表示过被侮辱的感觉,相反,我认为一个合格的候选人在面试开始时可能会感到轻松。这也有助于打破僵局,建立一个有意义的面试所需的融洽关系。另一方面,不合格的候选人通常会遇到这些较低的障碍。

    但我不想完全忽视当地的建议,我谨慎地决定将我的基本采访主题包括在内,并做好准备,如果它们不起作用的话就放弃它们。

    随着面试的进行,我很高兴能从这个水平开始。它没有冒犯任何人,不合适的候选人很容易被识别出来。

    这并不是说我希望应聘者每天都能处理一些琐碎的事情,但是无论是什么语言,对编程基础的理解都是必不可少的。即使是处于更高抽象级别的开发人员,也会定期暴露于十六进制(例如,RGB值)。鹦鹉学舌 stuff you find on the net 只会有助于事情第一次完美地运作。

    但是对于在过去五年中开始开发的开发人员来说,我认为在善意的IDE和“无代码”编程的模因的共同作用下,很容易掩盖基本原理。Visual Studio安装SPASH屏幕吹嘘开发时不需要编写代码。的确, does Visual Studio rot the mind ?

        2
  •  12
  •   Ignacio Vazquez-Abrams    17 年前

    如今,许多程序员似乎只是头脑中充满了足够的知识,可以粗暴地将代码强制执行,然后将其发送到工作中,而不必被教导“位”之类的词是什么意思。

    我告诉你这是一门垂死的艺术…

        3
  •  10
  •   Ferruccio    17 年前

    位操作不仅仅是保存内存。它们对于编写清晰的代码非常有用。你想看哪一个?

    OpenFile("...", true, false)
    

    OpenFile("...", writeonly | append)
    

    这是一个无稽之谈/微不足道的例子,但你明白了。

        4
  •  7
  •   Johnny    17 年前

    如果您有一个已经很复杂的应用程序,为什么要使用位标志使其更加复杂呢?我个人不会使用这种标志,如果没有更多的好处,那么只是保持冷静。根据经验,写起来很容易,以后再调整就更难了,更不用说你自己写了。

    哦,作为记录,我知道如何使用它们。

        5
  •  3
  •   Cory House    15 年前

    在内存管理非常重要的嵌入式编程之外,它们的成本超过了它们的最小价值。特别是,查询包含位标志的db列会生成隐式SQL,该SQL需要引用应用程序的代码,以确定每个位操作引用的值。

    WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to? 
    

    如果不得不用这种方式查询数据库并不会让你感到害怕,那么应该这样做。

        6
  •  2
  •   alex    17 年前

    如果您的内存和速度要求非常严格,或者在进行低级硬件编程时,位字段非常有用。

    除非您正在进行嵌入式编程或类似的工作,否则您不需要它们。对于执行相同的任务,有更多可读、强大、可扩展的机制。例如,Java的枚举集。

    我希望一个好的程序员了解它们,而不是使用它们。

        7
  •  2
  •   PhiLho    17 年前

    “很多”是相当通用的,我们需要名字!;-)

    说真的,我来自汇编语言和C语言,我非常精通位操作。 但是我不会用它们来替换,比如说一个类中10个不相关的布尔值,用一个整数中的二进制标志来替换… 除非,也许,我有这个类的数百万个实例!

    如果必须操作布尔值的很多实例,我将使用一些位集类来优化和抽象这些位数组。

    现在,如果您想访问rgb[a]值的组件,如果您想调用一些API(即使这只是操作一些命名标志),那么在编程中位操作fu几乎是强制的。

    简而言之,我不会在我做的每个项目中都使用它,但是你不能忽视如何使用它(有点像regex…)。

        8
  •  0
  •   Sekhat    17 年前

    我仍然使用位运算符,虽然作为我选择的主要语言(也是专业语言)是C我经常使用标记枚举:)但是,我认为很多用PHP之类的东西编写代码的人都是自学的,不知道位运算或它们的用法。

    自学自学,直到我开始写C和C++代码之前,我对它们了解不多。现在我把它们用在有意义的地方。)

        9
  •  0
  •   Christopher Lightfoot    17 年前

    它们总是有一个地方可以在很小的空间中存储大量布尔标记;

    如果您有32个标志(例如);您可以将它们全部存储在一个“长整型”中,并且只使用最多4个字节,现在假设您选择为每个标志使用一个长整型(仅仅是因为代码更易于维护-您现在有128个字节需要处理)。

    我的背景主要是C/C++,所以我在他们身上长大,所以我在我使用的每种语言中都明确地使用它们,但我确实同意;新手程序员往往不在乎——所有这些记忆都在周围——谁在乎呢?

    推荐文章