我注意到很多开源项目不再使用BITWISE标志,即使它完全支持web(php / Mysql)常见的编程环境。 对于一些有效的问题,这是一个“失败的练习”,或者只是很多php程序员不知道如何处理这种类型的实现?
没什么太重要的,只是很好奇:) 谢谢大家
答案 0 :(得分:13)
我会伸出脖子,说每个技术职位都需要对按位操作有充分的理解。
我有一个间接解决这个话题的轶事。
2007年1月我在印度科钦招聘永久性开发人员。由于我没有参与候选人的初步筛选,所以我不知道期望什么标准,所以我准备了一系列问题和主题,从简单理解二进制和十六进制到架构,设计和项目管理。
当我与印度人力资源部门讨论我的做法时,我(轻轻地)被指责投球过低。他明确表示我对十六进制的问题可能被视为对候选人经历或教育的侮辱。
但是我在英国采访数百名候选人的经历使我确信不可能说得太低。我的观点是并且仍然是如果候选人很明显是合格的,那么调整讨论的水平就很简单。我从来没有任何人表达被侮辱的感觉,相反,我认为一个合格的候选人可能会在面试开始时感到宽慰。它也有助于打破僵局,并建立一个有意义的面试所需的关系。另一方面,不合格的候选人通常会陷入这些较低的障碍。
但是我不想完全忽视当地的建议,我谨慎地决定将我的基本面试主题包括在内,如果他们不工作,他们已经准备好放弃他们了。
随着访谈的进行,我很高兴我从那个级别开始。它没有冒犯任何人,并且很容易识别出不合适的候选人。
这并不是说我希望候选人每天都能处理喋喋不休的问题,但无论用什么语言,对编程基础知识的理解都是必不可少的。甚至更高抽象级别的开发人员也会定期暴露于十六进制(例如,RGB值)。 Parroting stuff you find on the net只会在第一次完美运作的情况下发挥作用。
但对于过去五年开始的开发人员而言,我认为很容易掩盖基本面,这是出于善意的IDE和“无代码”编程的模因。 Visual Studio安装spash屏幕夸耀开发而无需编写代码。的确,does Visual Studio rot the mind?
答案 1 :(得分:12)
现在很多程序员似乎只是充满了足够的知识来蛮力代码,然后被送到劳动力队伍而不被教导像“按位”这样的词甚至意味着什么。
我告诉你这是一种垂死的艺术......
答案 2 :(得分:10)
按位运算不仅仅是节省内存。它们对于编写清晰的代码非常有用。你更愿意看哪个?
OpenFile("...", true, false)
或
OpenFile("...", writeonly | append)
这是一个荒谬/琐碎的例子,但你明白了。
答案 3 :(得分:7)
如果您有一个已经很复杂的应用程序,为什么要使用按位标志使其更复杂。我个人不会使用这种旗帜,如果没有任何更多的好处,那么只是很酷。而且经验丰富,写它很容易,以后调整它会更难,更不用说如果你自己没有写它。
哦,为了记录,我确实知道如何使用它们。
答案 4 :(得分:3)
在内存管理至关重要的嵌入式编程之外,它们的成本超过了它们的最小值。特别是,查询包含按位标志的db列会产生神秘的SQL,需要引用应用程序的代码才能确定每个按位操作引用的值。
WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to?
如果以这种方式查询你的数据库并不会吓到你,那就应该。
答案 5 :(得分:2)
如果内存和速度要求非常严格,或进行低级硬件编程时,位域非常有用。
除非您正在进行嵌入式编程或类似的东西,否则您不需要它们。有更多可读,强大,可扩展的机制来执行相同的任务。例如,Java的EnumSets。
我希望一个优秀的程序员能够了解它们而不是使用它们:-p
答案 6 :(得分:2)
“很多”很通用,我们想要名字! ; - )
说真的,我来自汇编语言和C语言,我对按位操作非常熟练。 但是我不会用它们替换,比如一个整数中带有二进制标志的类中的10个不相关的布尔值... 除非,或许,我有这个班级的数百万个实例!
我是否必须操纵布尔的大量实例,我会使用一些bitset类来优化和抽象掉这些位数。
现在,如果要访问RGB [A]值的组件,如果要调用某些API(即使只是对多个命名标志进行OR运算),编程中的位操作几乎是必需的,等等。
简而言之,我不会在我做的每个项目中使用它,但你不能忽视如何做(有点像正则表达式......)。
答案 7 :(得分:0)
我仍然使用按位运算符,虽然我选择的主要语言(专业)是C#我经常使用Flag枚举:)但是,我认为很多像PHP这样的代码编程的人都是自学的,不了解按位操作或它们的用法。
自己自学,在我开始编写C和C ++代码之前,我对它们知之甚少。现在我在有意义的地方使用它们:)
答案 8 :(得分:0)
它们总是有一个在少量空间中存储大量布尔标志的地方;
想想你是否有32个标志(例如);你可以将它们全部存储在一个“长整数”中并且只使用4个字节。现在想象你选择对每个标志使用long(只是因为代码更容易维护 - 你现在有128个字节需要处理。
我的背景主要是C / C ++,所以我对它们有所了解,所以我肯定会在我使用的每种语言中使用它们;但我同意;新手程序员往往不关心 - 所有这些记忆都存在 - 谁在乎呢?