none
あまり見たことがない文法のソースを見つけましたが、どうんな意味になりますか? RRS feed

  • 質問

  •     protected override CreateParams CreateParams {
          get {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x20; // WS_EX_TRANSPARENT
            cp.ExStyle |= 0x80; // WS_EX_TOOLWINDOW 
            return cp;
          }
        }
    


    以上のソースの中で、4行、5行目に

    < |= > の記号を使ってますが、

    これは何の意味になりますか?

    宜しくお願いします。

    2010年12月10日 0:57

回答

  • |= 演算子

    フラグの付け外しをするときによく使用されます。

    • 回答としてマーク Pinokio-k 2010年12月10日 2:35
    • 回答としてマークされていない Pinokio-k 2010年12月10日 2:39
    • 回答としてマーク Pinokio-k 2010年12月10日 2:40
    2010年12月10日 1:18
  • 以下は同じ意味です。

    cp.ExStyle |= 0x20;

    cp.ExStyle =  cp.ExStyle | 0x20;

     

    では「 | 」はというと、論理演算子で、論理和を表します。

    論理和とは、XとYの値の真偽の組み合わせで、以下のように返すものです。

    Xがfalse Yがfalse ⇒ false

    Xがtrue Yがfalse ⇒ true

    Xがfalse Yがtrue ⇒ true

    Xがtrue Yがtrue ⇒ true

     

    つまり、XかYどちらかの値が真であれば真、両方とも偽であれば偽を返します。

     

    たとえば、cp.ExStyleの値を、仮に「0x80」だったとします。

    「0x80」と「0x20」をそれぞれ2進数に直すと、以下のようになります。

    0x80 ⇒ 10000000

    0x20 ⇒ 00100000

     

    ここで、上記2つの値の各ビットをそれぞれの論理和を求めると、以下となります。

    論理和 ⇒ 10100000

     

    この値を16進数で表せば「0xA0」となり、この値がcp.ExStyleに代入されます。

     

    視覚的に簡単に試せる方法としては、Windows付属の電卓の表示メニューで関数電卓にし、

    16進にチェックした状態で、「80」「Orボタン」「20」「=ボタン」を押すと「A0」になり、

    その状態で2進数をチェックすると「10100000」になりますね。

     

    他にも似たようなもので、論理積(AND)や排他的論理和(XOR)などがあり、

    論理和を理解する上では同時に理解したい内容です。

    近い内容ではビットシフトというものもあり、これも上記と併用してよく利用されます。

     

    メモリ容量が制限された組込み系のアプリなんかで、フラグ8つをまとめて

    1バイトでもって、それをディップスイッチの状態として利用したりなんかしますね。


    • 回答としてマーク Pinokio-k 2010年12月10日 2:35
    2010年12月10日 2:14

すべての返信

  • |= 演算子

    フラグの付け外しをするときによく使用されます。

    • 回答としてマーク Pinokio-k 2010年12月10日 2:35
    • 回答としてマークされていない Pinokio-k 2010年12月10日 2:39
    • 回答としてマーク Pinokio-k 2010年12月10日 2:40
    2010年12月10日 1:18
  • 以下は同じ意味です。

    cp.ExStyle |= 0x20;

    cp.ExStyle =  cp.ExStyle | 0x20;

     

    では「 | 」はというと、論理演算子で、論理和を表します。

    論理和とは、XとYの値の真偽の組み合わせで、以下のように返すものです。

    Xがfalse Yがfalse ⇒ false

    Xがtrue Yがfalse ⇒ true

    Xがfalse Yがtrue ⇒ true

    Xがtrue Yがtrue ⇒ true

     

    つまり、XかYどちらかの値が真であれば真、両方とも偽であれば偽を返します。

     

    たとえば、cp.ExStyleの値を、仮に「0x80」だったとします。

    「0x80」と「0x20」をそれぞれ2進数に直すと、以下のようになります。

    0x80 ⇒ 10000000

    0x20 ⇒ 00100000

     

    ここで、上記2つの値の各ビットをそれぞれの論理和を求めると、以下となります。

    論理和 ⇒ 10100000

     

    この値を16進数で表せば「0xA0」となり、この値がcp.ExStyleに代入されます。

     

    視覚的に簡単に試せる方法としては、Windows付属の電卓の表示メニューで関数電卓にし、

    16進にチェックした状態で、「80」「Orボタン」「20」「=ボタン」を押すと「A0」になり、

    その状態で2進数をチェックすると「10100000」になりますね。

     

    他にも似たようなもので、論理積(AND)や排他的論理和(XOR)などがあり、

    論理和を理解する上では同時に理解したい内容です。

    近い内容ではビットシフトというものもあり、これも上記と併用してよく利用されます。

     

    メモリ容量が制限された組込み系のアプリなんかで、フラグ8つをまとめて

    1バイトでもって、それをディップスイッチの状態として利用したりなんかしますね。


    • 回答としてマーク Pinokio-k 2010年12月10日 2:35
    2010年12月10日 2:14
  • ご丁寧な返事、ありがとうございます。

     

    勉強になりました。

    2010年12月10日 2:36