質問する質問する
 

回答済み何故、0x01 -and 0x10 がTrue?

  • 2007年11月15日 20:52puu ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    ビット単位で扱うプロパティがあり、マスクしてOn/Offをチェックしたい為、以下の論理(ビット)演算子の確認を行いました。

    ① Write-host (0x1 -and 0x1) (0x0 -and 0x0) (0x0 -and 0x1) (0x1 -and 0x0)
    ② Write-host (0x1 -or  0x1) (0x0 -or  0x0) (0x0 -or  0x1) (0x1 -or  0x0)
    ③ Write-host (0x01 -and 0x10) (0x10 -and 0x01)
    ④ Write-host (0x01 -or  0x10) (0x10 -or  0x01)
    ⑤ Write-host ("{0:x2}" -f (0x01 -band 0x10)) ("{0:x2}" -f (0x10 -band 0x01))
    ⑥ Write-host ("{0:x2}" -f (0x01 -bor  0x10)) ("{0:x2}" -f (0x10 -bor  0x01))

    上記を実行すると、それぞれ以下の結果が返されます。

    ① True False False False
    ② True False True True
    ③ True True
    ④ True True
    ⑤ 00 00
    ⑥ 11 11

    ③以外は期待通りの結果になっていますが、③については「False False」が返されると思っていました。
    考え違いをしているのでしょうか?
    他のホームページを検索しても記述が見つかりませんでした。
    どなたかご教示して頂けませんか?
    宜しくお願い致します。


回答

  • 2007年11月16日 0:32田辺茂也MSFT, モデレータユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    puu さんこんにちは。

     

    ビット演算子は -band, -bor です。man about_comparison_operators をご参照ください。

    3 の場合、-and だと、0x01 も 0x10 も $true ですから

    0x01 -and 0x10 は $true -and $true となり、結果も $true になります。

     

     

すべての返信

  • 2007年11月16日 0:32田辺茂也MSFT, モデレータユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み

    puu さんこんにちは。

     

    ビット演算子は -band, -bor です。man about_comparison_operators をご参照ください。

    3 の場合、-and だと、0x01 も 0x10 も $true ですから

    0x01 -and 0x10 は $true -and $true となり、結果も $true になります。

     

     

  • 2007年11月16日 6:33puu ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    田辺さん、こんにちは。

    早々の回答、有難う御座います。

    論理演算子の場合もビット演算子と同様に一度、左辺と右辺の論理積を行い、その結果を返すものと思っていました。
    やはり考え違いですね。
    また、一つ勉強になりました。