piapia123
ja

基数の四則演算

変換

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

2・8・10・16 進数で四則演算を行うツールです。 桁あふれの回り込みはしません。 16 進数の計算機には、結果を 32 ビットや 64 ビットで切り詰めるものがあります(`0xFFFFFFFF + 1` が `0` になる)。それはマシンの語長を模したもので、算術ではありません。計算機はまず「この 2 つの数を足すといくつか」に答えるべきです。マスクや回り込みが必要な場合はビット演算を使ってください。そこではビット幅が明示的なパラメーターで、剰余が目に見えます。 除算は商と余りを返し、黙って小数にはしません。 整数除算には世界で 2 つの流儀があります:0 方向への切り捨て(C 系、JavaScript の BigInt)と床関数(Python)です。`-7 ÷ 2` は前者で -3 余り -1、後者で -4 余り 1 になり、どちらも正しく、どちらが欲しいかによります。そこでこのツールはどちらにも与しません:割り切れないときは余りを並べて出します。 接頭辞は選択した基数より優先されます。 `0x` / `0o` / `0b` を書けばその基数として読みます。`0b1010 + 0xFF` のような混在はそれでしか表現できません。

機能

  • 4 種類の演算:加算・減算・乗算・除算。負の数にも対応
  • 入力と出力の基数を 2・8・10・16 からそれぞれ選べる(異なってもよい)
  • 接頭辞優先:`0b1010 + 0xFF` のような混在を表現できる
  • 除算は商を返し、割り切れないときは余りを併記(0 方向への切り捨て)
  • 任意の大きさの整数で正確。`0xFFFFFFFF × 0xFFFFFFFF` も切り詰めません
  • 結果が 10 進数でないときは 10 進の値も添えるので暗算が要りません
  • 1 行に 1 オペランドなので、同じ数との演算を一括で行えます
  • 入力では `_` と空白を区切りとして使えます

使い方

  1. 第 1 オペランドを 1 行に 1 つ貼り付けます
  2. 入力の基数と演算を選び、2 つ目のオペランドを入力します
  3. 必要なら出力の基数を別のものに変えます
  4. 行のコピーボタンで結果を取り出します

よくある質問

結果が回り込んだ大きな数ではなく負になるのはなぜですか?
このツールが行うのは算術であり、マシンの語長の模擬ではないからです。`0x00 - 1` は `0xFFFFFFFF` ではなく `-0x1` になります。回り込みは実機の語長(32 ビットか 64 ビットか、それ以外か)に依存し、勝手に 1 つ選ぶのは推測になります。固定幅で剰余を取りたい場合はビット演算を使ってください。ビット幅を選べば減算がその幅で自然に回り込みます。
割り切れないときはどうなりますか?
商と余りの 2 つを返します。どちらも整数で、選んだ基数で表示されます。16 進数なら `FF ÷ 10` は `F` 余り `F` です(255 = 15 × 16 + 15)。これは「整数除算」に 2 つの流儀があり、負の数で答えが変わるためです(`-7 ÷ 2` は -3 余り -1 か -4 余り 1)。どちらにも与せず余りを渡せば、どちらの流儀でも使えます。
小数は扱えますか?
扱えません。理由は 2 つあります。0.1 は 2 進数では循環小数なので書ける形はすべて近似値です。また 16 進数の小数演算には共通の取り決めがありません。整数の四則演算で実際の需要のほとんど(アドレスのオフセット、マスク、色の値、プロトコルのフィールド)はカバーできます。小数が必要なら 10 進数の道具か普通の電卓を使ってください。

関連ツール