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になりました。符号は気にしなくていいのかな?
そのへんがよくわからないのですが、
使いたい数値にはマイナスはないのでとりあえず ">>"を使って
やってみます。
ありがとうございました。
[上に]
[前に]
[次に]