ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
C++のif文で使う論理演算子とは、複数の条件を組み合わせて1つの真偽値(true/false)にまとめるための演算子で、論理AND &&・論理OR ||・論理NOT ! の3つがあります。たとえば「年齢が18以上 かつ 会員である」のように、複数の判定を1つのif条件にまとめたいときに使います。本記事では、3つの論理演算子の意味とコード例、短絡評価(short-circuit evaluation)の正確な挙動、優先順位とビット演算子との違い、よくある落とし穴までを解説します。
| この記事の要点 |
|---|
|
論理演算子の一覧
C++のif文で条件を組み合わせる論理演算子は次の3つです。いずれも結果は bool 型(true または false)になります。
| 演算子 | 名称 | 意味 | 真になる条件 |
|---|---|---|---|
&& |
論理AND(かつ) | 左右の両方が真のときだけ真 | 左 true かつ 右 true |
|| |
論理OR(または) | 左右のどちらかが真なら真 | 左か右の少なくとも一方が true |
! |
論理NOT(否定) | 真偽を反転する(単項演算子) | 対象が false のとき |
※ C++では and/or/not という代替表記(演算子の別名キーワード)も使えますが、実務では記号 &&/||/! が一般的です。
論理AND(&&)のコード例
&& は「両方の条件が成り立つとき」に処理を実行します。次の例は、点数が0以上100以下のときだけ「有効」と判定します。
|
#include <iostream> int main() { if (score >= 0 && score <= 100) { // 両方が真 |
論理OR(||)のコード例
|| は「どちらか一方でも成り立てば」処理を実行します。次の例は、入力が 'y' または 'Y' のときに「はい」と判定します。
|
char c = 'Y'; if (c == 'y' || c == 'Y') { // どちらかが真 |
論理NOT(!)のコード例
! は1つの値の真偽を反転する単項演算子です。!found は「found が偽のとき真」になります。
|
bool found = false; if (!found) { // found が false なら真 |
短絡評価(short-circuit evaluation)
C++の && と || は短絡評価を行います。これは、左辺だけで結果が確定する場合、右辺を評価しない(実行しない)という仕様です。
| 演算子 | 右辺を評価しない条件 | 理由 |
|---|---|---|
&& |
左辺が false のとき |
左が偽なら、右が何であれ全体は偽で確定するため |
|| |
左辺が true のとき |
左が真なら、右が何であれ全体は真で確定するため |
この性質は、Nullチェックのように「先に安全性を確かめてから中身にアクセスする」場面で役立ちます。次の例では、左辺 p != nullptr が偽(=ポインタがNull)のとき、右辺 *p > 0 は評価されないため、Nullポインタの参照外しを防げます。
|
int* p = nullptr; // 左辺が false なら、右辺 *p は評価されない(安全) |
もし順序を逆にして *p > 0 && p != nullptr と書くと、先に *p が評価されてNullポインタを参照してしまい、未定義動作(クラッシュなど)になります。安全チェックは必ず左側に置くのが定石です。
優先順位と括弧
論理演算子の優先順位は高い順に ! > && > || です。また、&& や || よりも比較演算子(==、<、> など)のほうが優先順位は高いため、a < b && c > d は (a < b) && (c > d) と解釈されます。
ただし && と || を混在させると意図が読み取りにくくなります。たとえば a || b && c は a || (b && c) と解釈されます(&& が先)。誤読を防ぐため、意図を括弧で明示しましょう。
|
// 括弧なし:&& が || より優先 → a || (b && c) // 括弧で意図を明示(推奨) |
ビット演算子 & / | との違い(混同注意)
記号が似ているため 論理演算子 &&/|| と、ビット演算子 &/| を混同しがちですが、別物です。
| 項目 | 論理演算子 && / || |
ビット演算子 & / | |
|---|---|---|
| 処理単位 | 条件全体の真偽(bool) |
整数の各ビットごと |
| 短絡評価 | あり(右辺を省略しうる) | なし(両辺を必ず評価) |
| 主な用途 | if文などの条件判定 | フラグ操作・ビット計算 |
if文の条件で誤って & を使うと、短絡評価が効かないうえ、ビット単位で計算されるため結果が変わることがあります。たとえば 2 && 1 は true(1)ですが、ビット演算 2 & 1 は 0(=偽扱い)になります。条件判定には必ず &&/|| を使いましょう。
落とし穴
| 注意したいポイント |
|---|
|
よくある質問(FAQ)
Q. && と & はどちらを使えばいいですか?
A. if文などで条件の真偽を判定する目的なら &&(論理AND)を使います。& はビット演算用で、短絡評価がなく結果も異なるため、条件判定では使いません。
Q. 短絡評価は無効にできますか?
A. &&/|| の短絡評価はC++の言語仕様であり、無効化はできません。両辺を必ず評価したい場合は、条件式の中で副作用を起こさず、先に各値を変数へ求めてから論理演算する設計にします。
Q. 3つ以上の条件はどう書きますか?
A. if (a && b && c) のように演算子をつなげられます。&& と || を混ぜるときは、優先順位の誤読を避けるため括弧で意図を明示してください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?