gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

その値は数字? 数値?

直接的にはPHPなのですが、まぁPerlでもほぼ確定で同様のことが起きると思うので、あわせて。
型がしっかりした言語ではおきにくい事故なのですが…多分。型が暗黙に色々といじくられてしまう言語は、多分「プログラマの脳内でも自動補完」がなされてしまい、結果的に物凄いことが時々起きます。
直接的具体的には、こんな事象でした。


ビットマスク関連の計算がありまして。「1バイト値のうち、上位nビットを残し、それ以下をマスクする」系の処理を連想してください。
例えばnが4であれば、1111 0000(0xf0)を、目的とする値にぶつけて論理演算すればよいのですが。
ここで、間違えて


$base_num = "11110000";
とやってしまいました。
恐らくは頭の中で無意識にこの値を「二進数として」取り扱うつもりだったのでしょう。
でもスクリプト言語では、これは「一千百十一万」という10進数として取り扱われてしまいます。以降この値を使って論理演算すれば以下略。


これ以外にも。例えば"0"というものを見たときに、スクリプトではこれを「数字」としても「数値」としても扱えてしまいます。でも、実際には数値と数字はまったく違うものです。
数値は「値」であり、メモリの中に格納されている実際の値です。
数字は「文字」であり、それは「ある値を文字としてあらわしたときに出てくるもの」です。
マシン語でVRAMとかやってるとよくわかるんですけどねぇ(苦笑
多分、ここを読んでる人の多くは「わかっている」ことだと思うのですが。あなたが「教えている」人はちゃんと理解できてますか?
…っていうのを、自戒を込めて書いてます(笑