人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlで文字列のビット演算をする際、
どういった変換がなされているのか教えてください。

例 : "50" & "4" = 4

ここでは"50"と"4"は何に変換され、
最終的に4という答えにいたるのでしょうか。

初歩的なことで申し訳ないですが、
よろしくお願いします。

●質問者: the_yakisoba
●カテゴリ:コンピュータ インターネット
✍キーワード:Perl ビット 文字列 演算
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● dungeon-master
●45ポイント

http://www.rfs.jp/sb/perl/02/bit.html

それぞれの文字をAsciiコードに直して、対応する位置の値どうしで演算します。


ご質問のケースでは、

"50"→Asciiの 0x35,0x30の並び。

"4"→Asciiの 0x34,0x00の並び(0x00は演算時の長さをそろえるために付与)

それぞれの値をビットAND演算すると

0x35 & 0x34 → 0x34

0x30 & 0x00 → 0x00


0x34,0x00の並びは、"4"の文字とNull文字。

ということで、見た目は「4」になった考えられます。

◎質問者からの返答

お早い回答大変助かります。

>"4"→Asciiの 0x34,0x00の並び(0x00は演算時の長さをそろえるために付与)

この部分で0x00をつけるとのことですが、

なぜ

0x00,0x34の順でなく0x34,0x00の順なのでしょう


2 ● uehaj
●27ポイント

最後に0x00をつける話ですが、これは長さをそろえるため、というより文字列の末尾を表すターミネーター文字(ナル)文字ではないかと思います。

短いほうの文字の最後のターミネーター文字(0x00)がANDで作用されることにより、長いほうの文字の同じ位置に0x00が入ることで、文字列の長さが短いほうと同じ長さに切りそろえられているように見える、ということだと思います。


3 ● uehaj
●8ポイント

最後に0x00をつける話ですが、これは長さをそろえるため、というより文字列の末尾を表すターミネーター文字(ナル)文字ではないかと思います。

短いほうの文字の最後のターミネーター文字(0x00)がANDで作用されることにより、長いほうの文字の同じ位置に0x00が入ることで、文字列の長さが短いほうと同じ長さに切りそろえられているように見える、ということだと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ