コードとしては下記の様な感じです。
C++
1bool result = true; 2 3// bool値を論理演算で比較して結果を代入 4result = result && true; 5 6// 上記だと result 2回出てきてなんかスッキリしないので、ビット演算でも結果が同じなら使いたい 7result &= true;
C++ の bool型は、内部的に 0/1 のint値管理のイメージがあるので、
ビット演算でも論理演算と同じ結果が得られそうなのですが、
実際のところ全てのコンパイラで問題無いのでしょうか?
一応下記で確認した限りでは、論理演算でもビット演算でも同じ結果が得られました。
http://ideone.com/e.js/zVWZKA
C++
1#include <iostream> 2using namespace std; 3 4int main() { 5 // your code goes here 6 bool is_true = true; 7 bool is_false = false; 8 cout << "is_true : " << is_true << endl; 9 cout << "is_false : " << is_false << endl; 10 cout << endl; 11 12 // bool値の演算は、論理演算ではなくbit演算子でも良いのだろうか? 13 // C++的に boot値は 0/1 で内部的には持ってそうなので行けそう? 14 // ビット演算子だと代入が簡単なので使いたいなーというお話 15 16 // is_true true 17 cout << "is_true && true : " << (is_true && true) << endl; 18 cout << "is_true & true : " << (is_true & true) << endl; // これが使える is_true &= true 19 cout << "is_true || true : " << (is_true || true) << endl; 20 cout << "is_true | true : " << (is_true | true) << endl; // これが使える is_true |= true 21 cout << endl; 22 23 // is_false true 24 cout << "is_false && true : " << (is_false && true) << endl; 25 cout << "is_false & true : " << (is_false & true) << endl; // これが使える is_false &= true 26 cout << "is_false || true : " << (is_false || true) << endl; 27 cout << "is_false | true : " << (is_false | true) << endl; // これが使える is_false |= true 28 cout << endl; 29 30 // is_true false 31 cout << "is_true && false : " << (is_true && false) << endl; 32 cout << "is_true & false : " << (is_true & false) << endl; // これが使える is_true &= false 33 cout << "is_true || false : " << (is_true || false) << endl; 34 cout << "is_true | false : " << (is_true | false) << endl; // これが使える is_true |= false 35 cout << endl; 36 37 // is_false false 38 cout << "is_false && false : " << (is_false && false) << endl; 39 cout << "is_false & false : " << (is_false & false) << endl; // これが使える is_false &= false 40 cout << "is_false || false : " << (is_false || false) << endl; 41 cout << "is_false | false : " << (is_false | false) << endl; // これが使える is_false |= false 42 43 return 0; 44}
stdout
1is_true : 1 2is_false : 0 3 4is_true && true : 1 5is_true & true : 1 6is_true || true : 1 7is_true | true : 1 8 9is_false && true : 0 10is_false & true : 0 11is_false || true : 1 12is_false | true : 1 13 14is_true && false : 0 15is_true & false : 0 16is_true || false : 1 17is_true | false : 1 18 19is_false && false : 0 20is_false & false : 0 21is_false || false : 0 22is_false | false : 0

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/30 06:38
2016/08/30 06:42