[PHP-users 7964] Re: Permissionのアルゴリズム

Nobuyuki.Fukuoka php-users@php.gr.jp
Fri, 7 Jun 2002 09:29:52 +0900


福岡です。

ビットについては自分もC言語習い始めの時に苦労しました。
で、比較的理解しやすい方法を・・・

1.右手でも左手でもどちらでもいいので「ぐー」を作ります。
2.親指を立てます --> これが「1」です。
3.親指をたたんで人差し指を立てます --> これが「2」です。
4.人差し指はそのままで再び親指を立てます --> これが「3」です。
5.人差し指と親指をたたんで中指を立てます --> これが「4」です。
    この時立て方を間違えると顰蹙を買うので注意しましょう(^^;

この方法で片手で31まで数えられます。この時は「パー」ですね。
ちなみに「チョキ」は6、「ぐわし!(3本指タイプ)」は21、
お○まちゃんがカップを握る時は16です。(小指が立ってますよねぇ)

ビット演算の時は両手で数を作った状態で互いを向き合わせて
どちらかの手の甲側からみれば・・・論理和ならすぐに解を求められます。

*--------------------------------------------*
  Nobuyuki.KAPPA.Fukuoka
  HomePage : http://kappa.kusukusu.com/
  E-mail(Private) : kappa@air.linkclub.or.jp
  E-mail(Business) : fukuoka@tyo.mind.co.jp
*--------------------------------------------*

----- Original Message -----
送信者 : "Morikawa [encore-ann]" <i@encore-ann.com>
宛先 : <php-users@php.gr.jp>
送信日時 : 2002年6月6日 19:05
件名 : [PHP-users 7962] Re: Permissionのアルゴリズム


> もりかわ@似非PGです。
>
> 何人もの方、ご回答ありがとうございます。
> レスが交互しますが。。。
>
> 小山さん[7946]
> > 1, 2, 4 と数値で考えると分かりにくいのかもしれませんが、これは「ビッ
> > トフラグ」という非常に良く使われる手法です。
>
> ビットを立てる、という奴ですね。
>
> ビット演算については何度か理解しようとしたのですが、
> 文系の自分にはかなり?です。
> # ネットマスクも苦労した。。。
>
> 和田さん[7945]
> > もりかわさんが最終的に何を解決しようとされているのかが良く分か
> > らないのですが、以下のスクリプトを簡単にするのなら、
> ...以下省略...
>
> 澤田さん[7944]
> > fileperms() なんてどうでしょう。
> >
> > あとは、man chmod とか。
> >
> > # イマイチ質問の意図が不明なので、変な返事かもしれず。
>
> 書く人がかくと、簡単になるもんですね。勉強になります。
> 目的は、各種オプションの設定に用いようと思ってます。
> $access['192.168.0.0']->is_allowed とか、
> $status->waiting, $status->opened とか。
> 値と定数値にあわせて設定がOn/Offされるようなものです。
>
> 梶井さん[7943]
> > http://jp2.php.net/manual/ja/function.decbin.php
> >
> > こういうことでいいんでしょうか?
>
> というようなことなんでしょうか?
> すみません、実装手段がいまいち分からないので。
> 最終的には、あるビットが立っているかどうかを知りたいのですが
> 10進数の比較のが自分には分かりやすいかと思ってます。
>
> が、、、小山さん[7946]
> > 例えばパー
> > ミッションが数値として $perm に保存されているとして、読み込み可能かど
> > うかを調べるには
> >
> > $readable = $perm & (1 << 2);
> >
> > とすれば良いです。読み込み可能を表すビットがオフだと $readable は 0 に
> > なるので、簡単に状態を判断できます。
>
> を見ると割と簡単そうですねえ。
> そうすると
>
> 和田さん[7945]
> > こんな感じでどうでしょう?
> >
> > function decode_option($val) {
> >     $list = array();
> >     $i = 1;
> >     while($val >= $i) {
> >         if ($val & $i) $list[] = $i;
> >         $i *= 2;
> >     }
> >     return $list;
> > }
>
> な風になるわけですね。
> これをHash的にしてやると簡単にobjectのプロパティが作れそうです。
> > function decode_option($val) {
> >     $list = array();
> >     $i = 1;
> >     while($val >= $i) {
>          if ($val & $i) $list[$i] = 1;
> >         $i *= 2;
> >     }
> >     return $list;
> > }
> $obj->option = decode_option($opts);
> if ($obj->option[IS_READABLE]) {
>     ;
> }
>
> まさに目から鱗ですね。
>
>
> 小山さん[7946]
> >   一度 C 言語の入門本をご覧になると、よりいっそう理解できるでしょう。
>
> やっぱり。。。(^^;
> Cで安全なものを作る自信がないので全然意欲がないのですが、
> やってみてもよいかなという気がしてきました。
>
> いや〜、一日でかなり成長した気がします。ありがとうございました。
>
> もりかわ
> [PHP-FAQ JP (非公式)] http://phpfaq.encore-ann.com
> 一度メゲてます。がんばれワカ造!
>
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users