いまだ理解できない。

[上に] [前に] [次に]
Hug 1999/08/18(水) 10:36:24
Perlのリファレンスがいまいち理解できません。
どのようなときに使う物なのでしょうか。
また、ビット演算子は具体的にどのようなときに使う物なのでしょうか。
教えてください。

クーポン拳 1999/08/18(水) 15:26:31
私はPerlの勉強をはじめたばかりなので詳しくはありませんが、
C言語にでてくるポインターと似てるんじゃないでしょうか?同じだったりして...。
変数や文字列が格納されている場所(メモリ上のアドレス)を指し示すといった。
難しいので読む程度のことしかしていませんがきっと大事なことだと思います。具体的な使い方は詳しくは知らないので私も知りたいところです。

とほほ 1999/08/19(木) 00:59:02
タイトルはこのラウンジに知識を求める人たちにとってとても重要なの
で、中身を推測できないタイトルはご勘弁ください。
「Perlのリファレンスやビット演算子の意義は?」
など、中身の推測できるタイトルでお願いいたします。

goosan [E-Mail] 1999/08/19(木) 08:59:24
C言語ユーザーとして回答してみます。
ビット演算子がC言語におけるポインタと似ているということ
ですが、では、C言語でポインタを扱うときにビット演算子を
使うかと言えば(C言語にもビット演算子はあります)、
そうなると疑わしいですね。ポインタの扱いには、普通の加算
・減算演算子や、インクリメント(++)、デクリメント(--)
演算子がよく使われるように感じます。
そうすると、そもそもビット演算子の存在意義って何なのだろう、
って感じですね。C言語では、システムに関係するプログラムを
作るときに、ビット演算子が使われるようです。私自身にその
ようなプログラミングの経験はないのですが、ある数値について、
その値そのものではなく、そのビット単位での操作を要求される
ことがあるようです。C言語では、Perlのように数値と文字列の
区別は曖昧ではなく、それどころか整数と浮動小数点数も明確に
区別されますからね。
アセンブリ言語のレベルでは、あるレジスタをリセットする時、
0を代入する(mov a,0)のではなく、自分自身との排他的論理和
を取る(xor a,a)ほうがスマートなプログラムになるとされて
いるようです。

ひゅーい 1999/08/19(木) 10:10:50
goosanさん
>ビット演算子がC言語におけるポインタと似ているということ
>ですが、
リファレンスのことを指しておられるのではないでしょうか。
参照渡しと値渡しの違いじゃないの?

変なこと言ってたらすいません。

Tmb 1999/08/19(木) 10:40:46
>そうすると、そもそもビット演算子の存在意義って何なのだろう、
>って感じですね。

「どうしてもビット演算しなくては」って状況は減ってるのかもしれないですね。
でもなくなったら困るなぁ。
#個人的には未だにbooleanでなく数値でフラグ立てることもまだまだ多いので。
#いや,さすがに一つの変数のビットごとにフラグを割り当てるなんて真似は
#もうやってませんけど。

でも,ビット演算は使いようによってはとても便利ですし,上手に使っていきたい
ものの一つですね。A=(A+1)and7 とかは未だによく使います。
#0123456701234...と数値をループさせたいときなど。たったこれだけのことに
#if文使うのって何かもったいないし(笑)

>アセンブリ言語のレベルでは、あるレジスタをリセットする時、
>0を代入する(mov a,0)のではなく、自分自身との排他的論理和
>を取る(xor a,a)ほうがスマートなプログラムになるとされて
>いるようです。

懐かしいなぁ。といっても私は趣味でZ80をちょこっと使ってただけですが。
代入(LD A,00H)だと,代入する数値を含めて2バイトの命令になるけど
XORなら1バイトで済むという理由から使ってました。速度的にも違うと
いう話だったけど。どちらにせよ,ここまでハードウェアが成長してしまうと,
どーでもいいと思う人も増えるのかもしれないですけど。

B-Cus 1999/08/19(木) 11:08:25
> Perlのリファレンスがいまいち理解できません。
配列の配列(2次元配列)とか、配列のハッシュとか、
ハッシュの配列とか、ハッシュのハッシュとかを表現するのに便利。
ラクダ本をよく読めば、そのうちわかるでしょう。

> ビット演算子は具体的にどのようなときに使う物なのでしょうか。
例えば statのファイルタイプを判別するとき。
if ( (stat(FH)[2]) & 0100000 ){ print "FH is regular file"}

> ここまでハードウェアが成長してしまうと,
> どーでもいいと思う人も増えるのかもしれないですけど。
というより、今となってはそこらへんの最適化はコンパイラと
アセンブラの仕事ですね。

goosan [E-Mail] 1999/08/19(木) 20:47:20
>リファレンスのことを指しておられるのではないでしょうか。
そうですね。ちょっと早とちりしてしまいました。

>参照渡しと値渡しの違いじゃないの?
実は私もリファレンスについて十分理解しているとは
言えませんが、C言語ではそもそも、関数の仮引数に配列を
指定することは出来ても、実際には配列そのものは渡されず、
配列へのポインタが渡されますからね。
#本当に配列そのものを渡していたら、スタックを食って
#しょうがないし・・・

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