時間/数値

ビット演算

指定したビット幅(8/16/32/64ビット)の整数に対するAND/OR/XOR/NAND/NOR/XNOR/NOTおよびシフト演算、任意の進数で表示。

Bitwise operations work directly on a number's individual bits rather than its value as a whole — the basis for permission flags, network protocols, and low-level optimization.

How to use it

Common uses

Things to keep in mind

The result of NOT and shifts depends on the chosen bit width — the same number gives a different result at 8-bit versus 32-bit width because of the different number of bits involved.

XOR is often used to toggle a flag — applying XOR twice with the same value returns the original.

このツールに関する記事: ビット演算:AND、OR、XORがビットレベルでどう動作するか

よくある質問

AND、OR、XOR、NAND、NOR、XNOR、NOTの違いは何ですか?

ANDは両方のビットが1のときのみ1を返し、ORは少なくとも一方が1のとき1を返し、XORはビットが異なるとき1を返します。NAND/NOR/XNORはそれらの否定形で、NOTは単一のオペランドの各ビットを反転させます。

数値のビット幅と符号はどのように扱われますか?

8/16/32/64ビットの幅を選択してください — 演算とシフトはその範囲内で行われます。負の数は2の補数で表現されるため、10進表記に慣れているとNOTやシフトの結果が予想外に見えることがあります。

左シフトと右シフトの違いは何ですか?

左シフト(<<)は右側にゼロを追加し、実質的にシフト量分だけ2のべき乗を掛けます。右シフトは論理的(左側にゼロを追加)または算術的(符号ビットを保持)であり、種類は選択したモードによって異なります。

"if (a & b == c)"のような式が期待通りに動作しないのはなぜですか?

ほとんどの言語では、比較演算子==はビット演算子&よりも優先順位が高いため、この式は書いた人が意図したものではなく"a & (b == c)"として評価されます。この落とし穴を避けるには、ビット演算を常に明示的な括弧で囲んでください。

個別のブール変数の代わりにビットフラグを使う理由は?

複数のフラグを1つの数値にまとめると、保存や送信がよりコンパクトになります(例えばネットワークプロトコルやファイル形式で)。また、AND/OR/XORで特定のフラグをチェックまたは変更するのは1回の高速な演算で済みます。

記事: 時間/数値

Unix時間:コンピュータが1970年から時間を数える理由

1970年1月1日がほとんどのコンピュータシステムにとって時間の基準点になった理由。

Cron式:タスクのスケジュールを読み解く方法

*/15 * * * *のような式を読み解き、タスクが正確にいつ実行されるかを知る方法。

数値システム:2進法、8進法、16進法が存在する理由

CSSの色#FF5733が10進数ではなく16進数の桁で書かれる理由。

日付の差:日数を数えることが見た目より複雑な理由

うるう年のせいで日付を単純に引き算すると間違った結果になる理由。

年齢計算:単純な年の引き算ではない理由

単純に生まれた年を引き算すると、実際より1歳多い年齢になることがある理由。

タイムゾーン:UTCがGMTと同じではない理由

UTCが年に2回変わることはないのに、ロンドン時間(GMT/BST)は変わる理由。

時間計算:時間・分・秒を正しく合計する方法

分と秒を足すとき、10進法の足し算と同じように余りを次の桁に「繰り上げ」なければならない理由。

ISO 8601 Duration:標準フォーマットで時間の長さを書く方法

PT1H30Mが「1時間30分」を意味し、「1分30時間」を意味しない理由。

週番号:国によって週の数え方が異なる理由

ISO 8601標準では1月1日が前年の第52週または第53週に属することがある理由。

ローマ数字:ゼロも位取りもないシステムの仕組み

IVが6ではなく4を意味する理由と、ローマ数字における減算のルールの仕組み。

IEEE 754:コードで0.1 + 0.2が0.3にならない理由

ほとんどすべてのプログラミング言語で0.1 + 0.2が0.30000000000000004と表示される理由。

数字を言葉に:数字を単語に変換する理由

銀行文書が金額を数字と言葉の両方で同時に書く理由。