2000 年 10 月
前も書いたと思うけど、個人的に「紅茶物語」だと思います。紅茶の話しじゃないですけどね
2000/10/30
|
地震が起きたときのぁぃぁぃの静まり方は異常(笑)、私の所は震度 3 でした。 前も書いたと思うけど、個人的に「紅茶物語」だと思います。紅茶の話しじゃないですけどね 計算式の順序って恐ろしいよねぇ〜ってお話を昨日致しましたが、以下ようなことです。 ABCDEFG って変数の 0x10 ビットが立っているかどうかを調べるプログラムを作れ! って感じで作ったんですよ。それが、次式です A = ( ABCDEFG & 0x10 == 0x10 )?1:0; A には 1 , 0 どちらが入ると思います? 演算の優先順位では「論理演算」より 「評価」の方が優先され演算されます。で すので、以上の式では 0x10 = 0x10 が演算された後でその結果と & ABCDEFGH と なります。わかりやすく書きますと A = ( ABCDEFG & ( 0x10 == 0x10 ))?1:0; なります。 ですから、 0x10 == 0x10 は真なので C や Perl では 1 が返され ABCDEFG と And( 論理積 )を取るのは 0x01 となってしまい ABCDEFG の 0x10 ビットが立っていても、この式は「真」にならないので 0 が A には返ってしまいます。 「論理演算」の優先順位も「算術演算」や「シフト演算」と同じように「評価」より優先されると思いこんでいたのですが「評価」の方が優先されるんですねぇ…… この式は正しくは A = (( ABCDEFG & 0x10 ) == 0x10 )?1:0; と明示的に囲んでやる必要があります。カッコやアロー演算子は最優先ですからね。小一時間悩んだよ〜 Becky ってエディタの色変えられるんですね、変えました。私の全てにおけるエディタ環境と同じように「背景:黒」と「文字:白」に変えました。長時間作業される方は絶対にこれに変えないと目がちらつきますよ。 本日の気分:優先順位はタマゴより難しい(謎):40% |
コメント