20

多くのオープンソース プロジェクトでは、Web に共通のプログラミング環境 (php/Mysql) で完全にサポートされていても、BITWISE フラグを使用していないことに気付きました。それは、いくつかの効果的な問題に対する「失われた実践」ということですか、それとも多くの PHP プログラマーがこのタイプの実装を処理する方法を知らないということですか?

あまり重要なことはありませんが、非常に興味があるだけです:)皆さんに感謝します

4

9 に答える 9

13

私は首を突っ込んで、すべての技術職にはビット単位の操作の十分な理解が必要であると言います。

そして、このトピックを間接的に扱っている逸話があります。

2007 年 1 月、私はインドのコーチンで常勤の開発スタッフを募集していました。私は候補者の予備審査に関与していなかったので、どのような基準が期待できるか分からなかったので、2 進数と 16 進数の簡単な理解から、アーキテクチャ、設計、プロジェクト管理まで、さまざまな質問とトピックを用意しました。

インドの人事担当者と私のアプローチについて話し合ったとき、ピッチが低すぎると(穏やかに)叱られました。彼は、ヘックスに関する私の質問は、候補者の経験や教育に対する侮辱と解釈される可能性があることを明らかにしました.

しかし、英国で何百人もの候補者を面接した経験から、ピッチが低すぎることはあり得ないという確信が固まりました。私の意見は、候補者が十分に適格であることが明らかになれば、議論のレベルを調整するのは簡単で簡単だということです。私は誰も侮辱されたという感情を表明したことはありません. また、緊張をほぐし、有意義な面接に必要な信頼関係を築くのにも役立ちます。一方、不適格な候補者は通常、これらの低いハードルで落ちます。

しかし、地元のアドバイスを完全に無視したくはなかったので、基本的なインタビューのトピックを含めることに慎重に決めました。

面接が進むにつれて、そのレベルから始められたことをうれしく思いました。誰も気分を害することはなく、不適切な候補者は簡単に特定されました。

これは、受験者が日々ビットをいじることに対処することを期待していると言っているわけではありませんが、言語が何であれ、プログラミングの基礎をしっかりと理解していることが不可欠です。より高いレベルの抽象化を行っている開発者でさえ、定期的に 16 進数 (RGB 値など) にさらされています。ネットで見つけたものをオウム返しにしても、初めて完全に機能する場合にのみ役立ちます。

しかし、過去 5 年間に開発を始めた開発者にとって、善意の IDE と「コードレス」プログラミングのミームに慣れ親しんだ基本的なことを簡単に忘れてしまうと思います。Visual Studio のインストール スパッシュ スクリーンは、コードを記述せずに開発できることを誇っています。確かに、Visual Studio は心を腐らせますか?

于 2008-10-22T08:47:24.543 に答える
12

最近の多くのプログラマーは、総当たりコードを実行するのに十分な知識で頭がいっぱいになり、「ビット単位」などの言葉の意味さえ教えられずに労働力に送り込まれているようです。

それは私があなたに言う死にゆく芸術です...

于 2008-10-22T08:09:23.013 に答える
10

ビット単位の操作は、メモリを節約するだけではありません。それらは、明確なコードを書くのに非常に役立ちます。どちらを見たいですか?

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

また

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

これは無意味で些細な例のようなものですが、アイデアはわかります。

于 2008-10-22T11:14:35.043 に答える
7

すでに複雑なアプリケーションがある場合、ビット単位のフラグを使用してアプリケーションをより複雑にするのはなぜですか。私は個人的にこの種のフラグを使用しませんでしたが、それ以上の利点がなければ、ただクールでした。そして経験から、それを書くことは非常に簡単です、あなたがそれを自分で書かなかった場合は言うまでもなく、後でそれを調整することはより困難です。

ああ、そして記録のために、私はそれらの使い方を知っています。

于 2008-10-22T08:25:32.187 に答える
3

メモリ管理が重要な組み込みプログラミング以外では、そのコストは最小限の価値を上回ります。特に、ビット単位のフラグを含む db 列をクエリすると、各ビット単位の操作が参照する値を判断するためだけにアプリのコードを参照する必要がある不可解な SQL が生成されます。

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

この方法で DB にクエリを実行しなければならないことが怖くない場合は、そうすべきです。

于 2011-06-24T21:01:15.937 に答える
2

「たっぷり」はかなり一般的です、私たちは名前が欲しいです!;-)

真剣に、私はアセンブリ言語とCから来ており、ビット演算に非常に精通しています。しかし、たとえば、クラス内の10個の無関係なブール値を整数のバイナリフラグに置き換えるためにそれらを使用することはありません...おそらく、このクラスのインスタンスが何百万もある場合を除きます。

ブール値の多くのインスタンスを操作する必要がある場合は、ビットセットクラスを使用して、これらのビット配列を最適化して抽象化します。

現在、ビット操作fuは、RGB [A]値のコンポーネントにアクセスする場合、一部のAPIを呼び出す場合(名前付きフラグの数をORするだけの場合でも)など、プログラミングではほぼ必須です。

要するに、私が行うすべてのプロジェクトでそれを使用するわけではありませんが、それを行う方法を無視することはできません(正規表現に少し似ています...)。

于 2008-10-22T10:53:25.147 に答える
2

ビットフィールドは、メモリと速度の要件が非常に厳しい場合、または低レベルのハードウェア プログラミングを行う場合に非常に役立ちます。

組み込みプログラミングなどを行っていない限り、それらは必要ありません。同じタスクを実行するための、はるかに読みやすく、強力で、拡張可能なメカニズムがあります。たとえば、Java の EnumSets.

優れたプログラマーはそれらを知っていて、使用しないことを期待します:-p

于 2008-10-22T09:34:58.300 に答える
0

私はまだビット演算子を使用していますが、私の主な言語はC#であるため、フラグ列挙型を使用することがよくあります:)しかし、PHPのようなものでコーディングする人の多くは独学であり、そうではないと思いますビット単位の操作またはそれらの使用法について知っています。

独学で、CとC ++のコードを書き始めるまで、それらについてはあまり知りませんでした。今、私はそれらが意味をなすところにそれらを使用します:)

于 2008-10-22T08:17:53.247 に答える
0

小さなスペースにたくさんのブールフラグを格納する場所が常にあります。

たとえば、32個のフラグがあるかどうかを考えてみてください。それらすべてを1つの「長整数」に格納し、4バイトを使用することができます。ここで、各フラグにlongを使用することを選択したと想像してください(コードの保守が簡単であるという理由だけで、128バイトを処理できるようになりました。

私のバックグラウンドは主にC/C ++なので、育ちましたので、使用するすべての言語で間違いなく使用しています。しかし、私は同意します。初心者のプログラマーは気にしない傾向があります-このすべての記憶が周りにあります-誰が気にしますか?

于 2008-10-22T09:54:11.977 に答える