---
title: "ビットマスクとは？特定のビットを取り出す・立てる・反転する考え方【基本情報技術者試験】"
description: "ビットマスクを「操作したいビット位置を指定するためのビット列」として整理し、ANDで取り出す、ORで1にする、XORで反転する考え方をFE試験向けに解説します。"
last_modified_at: "2026-07-02"
canonical_url: "https://stemtazoo.github.io/fe/bit-mask/"
section: "fe"
---

## まず結論

ビットマスクとは、**操作したいビットの位置を指定するためのビット列**です。

基本情報技術者試験では、ビットマスクは **どのビットを残すか、1にするか、反転するかを指定するもの** と考えると分かりやすいです。

使う演算によって、意味が変わります。

| 操作 | 使う演算 | マスクの1の意味 |
|---|---|---|
| 特定のビットを取り出す | AND | 残す場所 |
| 特定のビットを1にする | OR | 1にする場所 |
| 特定のビットを反転する | XOR | 反転する場所 |

つまり、マスクは単体で意味が決まるのではなく、**AND、OR、XORのどれと組み合わせるか** で役割が決まります。

## 直感的な説明

ビットマスクは、紙にかぶせる **型紙** のようなものです。

見たい場所だけ穴を開けておくと、そこだけ見えます。

例えば、8ビットの下位4ビットだけを取り出したいとします。

```text
元のビット列：1011 0110
マスク    ：0000 1111
```

このマスクは、下位4ビットだけが `1` になっています。

ANDを取ると、`1` の場所だけ元の値が残ります。

```text
  1011 0110
AND 0000 1111
=   0000 0110
```

このように、どのビットを操作対象にするかを指定するビット列が、ビットマスクです。

## 定義・仕組み

ビットマスクは、ビット演算で特定のビット位置だけを操作するために使います。

代表的な使い方は、次の3つです。

| 目的 | 例 | 考え方 |
|---|---|---|
| 取り出す | `値 AND マスク` | マスクが1の場所だけ残す |
| 1にする | `値 OR マスク` | マスクが1の場所を1にする |
| 反転する | `値 XOR マスク` | マスクが1の場所を反転する |

例えば、元の値を `1010 0101`、マスクを `0000 1111` とします。

### ANDで取り出す

```text
  1010 0101
AND 0000 1111
=   0000 0101
```

下位4ビットだけが残ります。

### ORで1にする

```text
  1010 0101
OR  0000 1111
=   1010 1111
```

下位4ビットがすべて1になります。

### XORで反転する

```text
  1010 0101
XOR 0000 1111
=   1010 1010
```

下位4ビットだけが反転します。

このテーマは、基本情報技術者試験の「基礎理論」や「情報に関する理論」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、ビットマスクを使って、特定のビットを残す、1にする、反転する問題が出題されやすいです。

選択肢を切るときは、まず問題文の目的を読みます。

| 問題文の目的 | 判断 |
|---|---|
| 下位4ビットを残したい | `0F` と AND |
| 上位4ビットを残したい | `F0` と AND |
| 特定のビットを1にしたい | OR |
| 特定のビットを反転したい | XOR |
| 特定のビットを0にしたい | 0を含むマスクとAND |

例えば、`0F` は2進数で次のように表せます。

```text
0F = 0000 1111
```

このため、`0F` は下位4ビットを指定するマスクとして使えます。

```text
値 AND 0F
→ 下位4ビットを取り出す
```

逆に、`F0` は上位4ビットを指定します。

```text
F0 = 1111 0000

値 AND F0
→ 上位4ビットを取り出す
```

## 科目Bでどう使う？

科目Bでは、プログラムのフラグ処理を読むときに、ビットマスクの考え方が役立ちます。

例えば、ある状態を1ビットずつ管理している場合があります。

```text
0000 0001：読取権限
0000 0010：書込権限
0000 0100：実行権限
```

このようなとき、特定の権限があるか確認するには AND を使います。

```text
権限値 AND 0000 0010
```

結果が0でなければ、書込権限のビットが立っていると判断できます。

また、権限を追加したいときは OR を使います。

```text
権限値 OR 0000 0010
```

権限を切り替えたいときは XOR を使うことがあります。

```text
権限値 XOR 0000 0010
```

科目Bでは、ビット列そのものよりも、**1が立っている位置が何を表すか** を読むのが大切です。

## よくある誤解・混同

ビットマスクでよくある誤解は、**マスクの1はいつも同じ意味だと思ってしまうこと** です。

| 誤解 | 正しい理解 |
|---|---|
| マスクの1は常に「残す」 | ANDでは残す、ORでは1にする、XORでは反転する |
| `0F` は上位4ビットを指定する | `0F` は下位4ビットを指定する |
| `F0` は下位4ビットを指定する | `F0` は上位4ビットを指定する |
| ORでも特定ビットを取り出せる | 取り出すときはANDを使う |
| XORは1にする演算 | XORは指定ビットを反転する演算 |

特に、次の対応を覚えておくと強いです。

```text
AND：1の場所だけ残す
OR ：1の場所を1にする
XOR：1の場所を反転する
```

同じ `0000 1111` というマスクでも、AND、OR、XORで結果が変わります。

だから、問題文では **どの演算を使うか** と **何をしたいか** をセットで読むのが大切です。

## まとめ（試験直前用）

- ビットマスクは、操作したいビット位置を指定するビット列
- ANDでは、マスクが1の場所だけ残す
- ORでは、マスクが1の場所を1にする
- XORでは、マスクが1の場所を反転する
- `0F = 0000 1111` なので、下位4ビットを指定する
- `F0 = 1111 0000` なので、上位4ビットを指定する
- マスクの意味は、組み合わせる演算で変わる
