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