blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_4

Perl ビット演算子 ビットストリング 明示的な指定 (0x222)

Perl ビット演算子 ビットストリング 明示的な指定 (0x222)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x222 回。

Perl のビット演算子に関係する「 ビットストリング 」( bitwise string ) を演算する場合に、それが数値であるかビット列であるかを明示的 ( explicitly ) に指定する方法を確認する。



数値として演算する



前回 (0x221) に引き続き ビット列演算子 (perlop) - perldoc.jp を参考にして「 ビット単位の文字列演算 」を確認します。

まずは、数値として計算する場合です。オペランドは共に 10 進数の整数です。


print 150 | 105, "\n";



これは、次の結果が得られます。


255



計算の内訳は次のようになっているはずです。


dec hex bin
-----------------
150 0x96 10010110
OR 105 0x69 01101001
--------------------
255 0xff 11111111



「 150 」と「 105 」のそれぞれのビット列が、「 OR 」演算によって無駄なく組み合わされて 1 バイトすべてにビットが立った値「 255 」が得られています。


数値として演算する その 2



次の演算も、双方を 10 進数の整数として演算するので、結果として「 255 」が得られます。


print '150' | 105, "\n";



次の演算も同様です。


print 150 | '105', "\n";



なぜなら、前回 (0x221) で確認した通り、また、書籍「 初めての Perl 第 6 版 」の P.265 にある通り、どちらか一方のオペランドが整数の場合、Perl はそれを整数として演算子するからです。


ASCII based のビットとして演算する



ASCII ベースの文字列としてビット演算をする場合は次のようにクォーテーションを使います。


print '150' | '105', "\n";



これは、次の結果が得られます。


155



これは、「 150 」と「 105 」のそれぞれの桁の数字を次のように ASCII コードに変換してから「 OR 」ビット演算することから得られる結果です。


[150]
1 0x31 00110001
5 0x35 00110101
0 0x30 00110000

[105]
1 0x31 00110001
0 0x30 00110000
5 0x35 00110101



演算の内訳は次のようになっています。


1 0x31 00110001
OR 1 0x31 00110001
------------------
1 0x31 00110001

5 0x35 00110101
OR 0 0x30 00110000
------------------
5 0x35 00110101

0 0x30 00110000
OR 5 0x35 00110101
------------------
5 0x35 00110101




演算の型を明示的に指定する



Perl のビット演算では、プレフィクス「 0+ 」とダブルクォート「 " 」を利用することで、数値のビット列または ASCII ベースのビット列で演算することを明示することが出来ます。

例えば、次のように値を変数に格納してみます。


my $foo = 150;
my $bar = 105;



これに対して次のように演算を行います。


print 0+$foo | 0+$bar, "\n";
print "$foo" | "$bar", "\n";



すると、結果として次の値が得られます。


255
155



「 0+ 」を付けた方は数値としてビット演算されるので「 255 」が、ダブルクォート「 " 」で囲んだ方は ASCII ベースの文字列としてビット演算されるので「 155 」が得られています。


0x222 -> 0x223 へ



次回からは、「 ディレクトリの操作 」を確認します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index






















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲