Perlのビット操作について

[上に] [前に] [次に]
そら 1999/07/07(水) 21:10:25
Perlについての質問なので、このラウンジの意図にあっていなければ
削除してください。(でも、ちょっと困っているので誰か助けてほしいのです)
perlでビットを右にシフトするとき、上位ビットに0を設定するには
">>>"を使うと、こちらのperlのページで見ました。
実際にやってみたのですが、シンタックスエラーで先に進みません。
どのようにすればよいのでしょうか?
どうぞよろしくお願いします。

B-Cus 1999/07/07(水) 21:22:41
http://www.tohoho-web.com/wwwperl1.htm#BitOperand
> $xx >> 2            # $xxを2ビット右シフト(上位ビットには符号ビットを埋める)
> $xx >>> 2           # $xxを2ビット右シフト(上位ビットには0を埋める)
ですね。やって見ましたが、perl4/5ともsyntax errorになりました。
ラクダ本にも >>> は書いてなかったのですが…。どうなんでしょう?>とほほさん

> 上位ビットに0を設定するには
まぁ普通に >> を使えば、おそらくお望みの結果が得られるとは思います。

mm 1999/07/07(水) 22:59:35
「>>>」 って、どこかで見たなぁと思って調べたら、やはりJavaにありました。
Javaでは、上位ビットを0で埋めてくれます。
でも、perlにはなさそうですね。ということは >> を使う場合は、
MSB(符号ビット)を意識する必要はありそうです…かな?

B-Cus 1999/07/07(水) 23:14:20
なるほど、とほほさんがJavaと勘違いされたのかしら。

で、これは値がマイナスの場合だけ関係あります(違うかしら?)。

ちなみにうちの環境では -1000>>2 は-250にならず、1073741574 になります
(32bitで2の補数表現を使うCPUなら全部そうなるでしょう)。

$i == -1000 のとき、>>2 で -250 という値が欲しいなら、
 $i>=0 なら そのまま符号反転
 $i<0 なら符号反転したものをシフトして、最後に符号反転
でいいと思います。

とほほ 1999/07/09(金) 00:08:31
> なるほど、とほほさんがJavaと勘違いされたのかしら。
かもしれません。何をみて記述したかすでに覚えていないのですが・・
次回の更新の際には修正します。(^^;)

そら 1999/07/09(金) 00:18:27
[[解決]]
>ちなみにうちの環境では -1000>>2 は-250にならず、1073741574 になります
>(32bitで2の補数表現を使うCPUなら全部そうなるでしょう)。
やってみたら、-250になりました。符号は気にしなくていいのかな?
そのへんがよくわからないのですが、
使いたい数値にはマイナスはないのでとりあえず ">>"を使って
やってみます。

ありがとうございました。

[上に] [前に] [次に]