2017-03-29 5 views
0

が、それは私が知っているは、それがLSB返し

if ((readParameter - > type(0) & 0xff) == 0xff) {} 

によって何を意味するの正し​​い私のマスキングです。しかし、それを再び== 0xffで評価することはどういう意味ですか?

私はそれを(例えば)このようなものを感じる:私は間違っているなら、私を修正してください

if ((00000000 00000000 00000000 11011001 & 00000000 00000000 00000000 11111111) == 00000000 00000000 00000000 11111111) 
    { 
    //IF THEY ARE EQUAL IT ENTERS IN THE LOOP ? IN THIS CASE THEY ARE NOT EQUAL 
    } 

を?

+3

** '(x&0xff)== 0xff'は、' x'の最下位バイトが '0xff' **の場合にのみ真です。あなたの質問に答えますか? (注意:括弧は必要ありませんが、 '&'は '&&'のtypoではなく、コンパイラ警告を取り除くために一般的に追加されます) – YSC

+0

_私たちが何かを '&'するとき、LSB_:いいえ、これは真実ではありません。 '0xff&something'は' something'のLSBを返しますが、 '0x12&something'は返しません。 –

+0

'1&0xFF'とは何ですか? '42&0xFF'、あるいは' 255&0xFF'はどうでしょうか?だから '(N&0xFF)== 0xFF'は' N 'の値が違うのですか? – Useless

答えて

2

に等しく、しかし、それはでそれを評価することによって、何を意味していたかどうかを確認するために、マスク自体と比較されます再び== 0xff?

このifは、最下位バイトが0xffに等しいかどうかをチェックします。 readParameter->type(0)の残りの部分には、他のビットが設定されている場合があります。それらが& 0xffで削除されなかった場合、0xffとの等価は決して真ではないかもしれません。

私たちが何かをd0 '&'としたら、それはLSBを返します。

これは正しくありません。バイナリのビット単位のANDを使用すると、結果は演算で使用される引数に依存します。 &で0xffを指定すると、最下位バイトが得られますが、(ui32value & 0xff000000) >> 24を実行すると、最上位バイトが読み取られます。

+0

haha​​、今私はそれを得た:-)固定 – marcinj

0

フィルタリング動作(& 0xff)の結果は、パラメータの最後の8ビットが全て1

関連する問題