忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/24 04:17 |
PHP5.5 PECL::BitSet
PECLに置いてあったBitSet
日本語はおろか英語ドキュメントすらもまったく見つからず、ソースとテストコードくらいしかないみたい。
よくわからないので使ってみます。
<?php
	$bitset = new BitSet();
	$bitset->set(1);
	print($bitset); // 0100000000000000000000000000000000000000000000000000000000000000
おっと、これ、もしかしてビット演算を簡単にやってくれる便利クラスじゃね?

<?php
	$bitset = new BitSet();
	$bitset->set(1);
	$bitset->set(3);
	$bitset->set(5);
	print($bitset);   // 0101010000000000000000000000000000000000000000000000000000000000
	$bitset->set(64); // Uncaught exception 'OutOfRangeException'
	$bitset->set(0);  // 全部1になる
	print($bitset);   // 1111111111111111111111111111111111111111111111111111111111111111
	$bitset->clear(); // クリア
	print($bitset);   // 0000000000000000000000000000000000000000000000000000000000000000
2進数じゃなくてただのフラグじゃねーか!
64桁も取ってるのに、たったの64ビットしかフラグ管理できません。
役に立たなすぎる。
あと0ビット目だけを操作する方法がありません。

<?php
	$bitset = new BitSet(8); // 8桁に設定
	$bitset->set(1);$bitset->set(2);$bitset->set(3); // メソッドチェーン非対応 01110000
	$bitset2 = BitSet::fromArray([1, 3, 5, 7]); // 01010101
	
	$bitset->andOp($bitset2);    // AND 01010000
	$bitset->orOp($bitset2);     // OR 01110101
	$bitset->xorOp($bitset2);    // XOR 00100101
	$bitset->andNotOp($bitset2); // $bitsetは1、$bitset2は0のときに1 00100000
	
	var_dump($bitset->size());        // BitSetの桁数。 8
	var_dump($bitset->length());      // BitSetを表せる最小桁数? 01010000なら4
	var_dump($bitset->cardinality()); // 1が立ってる数。 
	var_dump($bitset->isEmpty());     // 全て0のときだけtrue
	var_dump($bitset->get(1));        // 引数桁が1ならtrue
andOp()やorOp()など一見便利そうなのですが、どれも返り値がNULLでメソッドチェーン非対応のため、とても使いにくいです。
ビット管理がしたいからといって、正直わざわざBitSetを使うメリットは全く感じられませんでした。
PR


2014/04/25 23:46 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<買ったものリスト 2014/04/27 | HOME | 買ったものリスト 2014/04/20>>
忍者ブログ[PR]