2016-08-04 10 views
0

私はこことGoogleを使用して検索しました。 | (パイプ)シンボルはビット単位のOR演算子ですが、問題に固有のものは何も見つかりません。ここにはCinema4D Python SDKのexampleがあり、引数にはフラグがあり、複数のIDを|シンボル。Python:|で区切られたIDにはどうすればアクセスできますか? (パイプ)引数で

これは具体的にどのようなものですか?以下の機能でIDにアクセスするにはどうすればよいですか?

ID_OK = 100 
ID_CANCEL = 101 

def Func(flags): 
    print flags 
    return 

Func(ID_OK|ID_CANCEL) 

.. 

>> 101 

ありがとうございます。

答えて

0

フラグが時々「ビットマスク」と呼ばれています。次の資料を約あなたはまだアイデアを得ることができますC#を話していても

。それらを16進数として定義すると、使い易くなります。

バイナリ&を使用して、フラグが設定されているかどうかを判断できます。たとえば:

ID_OK = 0x01 
ID_CANCEL = 0x10 

def Func(flags): 
    print "0x%02x" % (flags) 
    if flags & ID_OK: 
     print "ID_OK" 
    if flags & ID_CANCEL: 
     print "ID_CANCEL" 

    print 
    return 

Func(ID_OK) 
Func(ID_CANCEL) 
Func(ID_OK|ID_CANCEL) 

は与える:

0x01 
ID_OK 

0x10 
ID_CANCEL 

0x11 
ID_OK 
ID_CANCEL 

フラグを通常これよりも大きくなっています。少数のフラグがある場合は、フラグごとに1つのニブルを予約することができれば、はるかに簡単です。

+0

ありがとう、DeepSpace、しばらくかかりましたが、今は理解しています。 – potiongraphics

0

ここで重要な点は、|と任意の数のフラグを組み合わせることによって一意の値が生成されるように、フラグの値を「スペースアウト」することです。そうすれば、各フラグは単に引数の値によって使用されることを意味することができます。このような http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

関連する問題