ビット幅を尊重することを教えてくれた最初のバグは、それ自体をクリアし続ける許可フラグでした 私は整数列にビットマスクをORしていて、フィールド全体がリセットされることがよくありました 原因は一度見たときに恥ずかしいものでした: 私はビットについて32 のスロットに住んでいるかのように推論していましたが、値はすでに拡大されており、上流のどこかではない迷走は私が決して説明しなかったビットを反転させていました 私はそれを修正しました 私は、私の言語が印刷した整然とした小数ではなく、実際の幅で実際のビットを示した電卓に座って、このガイドは、その習慣についてです バイナリ計算機 Toolz.dev では、すべての塩基を一度に確認できるビット単位の計算を行うことで、何時間も推測することが節約されます。
tl;dr: 二進計算機は二進、八進、十進、六進で書かれた整数に対して演算(加算、減算、乗算、除算)とビット演算(AND、OR、XOR、NOT、シフト)を行い、その結果を四塩基すべてで一度に表示する。 演算は任意のサイズで正確である; ビット演算は選択したビット幅に依存する。 バイナリ計算機 両方を完全にブラウザで実行し、ビットごとの結果の署名済みおよび署名なしの読み取り値をレポートします。
バイナリ計算機とは何ですか?
二進計算機は2 進数の整数に対して動作するツールですが 便利なものは2 進数に全く限られません 考えている2 進数や8 進数や10 進数や16 進数の基数を選び 数字を入力し 演算を選び 答えを読む良いものは全ての基数に対して その答えを同時に示すので 得られたものを正気度チェックする変換を 別々に実行することは決してありません。
これが重要な理由は、低レベルの作業が常に基底間を交差するためです。色は 16 進数、許可マスクは頭では 2 進数ですが、データベースでは 10 進数、ネットワーク値は 1 つの構成では 8 進数、別の構成では 10 進数です。すべての表現が表示された状態で 1 か所で計算を行うと、転写ミスのクラス全体が削除されます。16 進数の値を 10 進数の計算機にコピーして、最初に正しく変換できたことを期待しているわけではありません。
Toolz.dev ではフローが短いです。 input ベースを選択します。最初の値を入力します。 operation を選択します。 2 番目の値を入力します。結果は 2 進数、8 進数、10 進数、16 進数で表示され、ビット単位の操作では、符号付き読み取り値と選択した幅でのビット レイアウトも表示されます。
どのような操作をサポートしていますか?
2 つのファミリーがあり、それらをまっすぐに保つことがゲーム全体です。算術演算は加算、減算、乗算、除算、モジュロです。これらは真の数値に作用するため、通常の数学のように動作し、ビット幅には関係ありません。除算は整数商を返し、剰余を報告し、モジュロは剰余だけを返します。これは、人々が最も頻繁に逆算する区別です。
ビット単位の演算は AND、OR、XOR、NAND、NOR、XNOR、NOT、および左右のシフトです。これらは固定レジスタ内の生のビットに作用するため、その答えはレジスタの幅に完全に依存します。 AND、OR、および XOR は日常の 3 つです。 AND はビットをマスクし、OR はビットをセットし、XOR はそれらを切り替えます。否定された形式、NAND、NOR、および XNOR は幅内のそれらの補数です。 NOT はすべてのビットを反転します。シフトはパターン全体をいくつかの位置だけ左右に動かし、端から落ちたビットをドロップします。
どれが欲しいかを決めるときに使うクイックメンタルモデルは次のとおりです:
| 操作 | シンボル | 家族 | 通常の使用 |
|---|---|---|---|
| 加算/減算 | + / ー | 算数 | 普通の整数計算、任意のサイズ |
| 乗算/除算 | × / × | 算数 | 除算レポートは商と剰余です |
| モジュロ | モッド | 算数 | 残りのみ、例えばラップアラウンドインデックス |
| そして | &アンプ; | ビット単位で | マスクが切れ、フラグをテストします |
| または | | | | ビット単位で | フラグを設定し、マスクを組み合わせます |
| XOR | ^ | ビット単位で | ビット、安いパリティ、スワップを切り替えます |
| ない | ~ を | ビット単位で | 幅内のすべてのビットを反転します |
| 左/右にシフトします | < < / > > | ビット単位で | 2 のべき乗で乗算または除算し、フィールドをパックします |
なぜビット幅を選択する必要があるのですか?
これはビット単位の算数に慣れていない人を つまづかせる質問です 計算機が一番意見を述べている質問です 算術にはサイズに関係なく 明らかな答えがあります バイト単位で想像しても 64 ビット単位で想像しても 5 プラス 3 は 8 ですが ビット単位の NOT には 存在するビット数が分かるまで まったく答えがありません 5 の NOT は " flip every bit, " であり、結果は 8 ビットか 64 ビットで反転するかによって決まります。
シフトは反対方向からの依存関係も同じです 十分に左の値をシフトし ビットは上端から行進します 消えるかラップするかは レジスタのサイズによって異なります C、Java、Go、Rust の固定幅整数型は、前方の幅を定義することでこれに答えます: a uint8 は 8 ビット、a uint32 は 32 で、ビットごとの操作はすべてそのボックス内で行われます。計算機は、8、16、32、または 64 ビットを選択できるようにすることで、理想化された無限幅抽象化ではなく、実際のコードが生成するものと結果が一致することを正確に反映しています。
間違った幅を選択することは丸め誤差ではなく、別の答えです。 5 の NOT は 8 ビットで 250、32 ビットで 4294967290 です。どちらも幅については正しく、もう一方についても正しくありません。データ型に合わせて幅を設定する習慣を身につけることは、このツールが奨励する最も役立つ分野です。
two' はどのように結果に表示されますか?
ほとんどすべてのプロセッサは、を使用して符号付き整数を表します 2' を補完します、そして計算機は同じ規則に従うので、その出力はあなたのハードウェアと一致する。 two& #39; sの補数では、レジスタの上部ビットは負の重みを運ぶので、11111010の8 ビットパターンは、符号なしとして扱う場合は250、上部ビットを符号として読む場合は-6 と読み取る。
これが、ツールがビット単位の結果の両方の読み取り値をレポートする理由です。 NOT を 8 ビットで 5 で実行すると、ビット パターン 11111010 が得られます。計算機は、符号なし値 250、符号付き値 -6、およびバイナリ レイアウトを示すため、2 つの方法で解釈された同じビットであることがわかります。その二重読み取りは、値がコード内の符号付きタイプと符号なしタイプの間で交差する場合にまさに必要なものであり、これは "impossible" の古典的なソースです。ログに表示される数字。
算術結果は負になると同じルールに従います。 5 から 12 を引くと、真の答えは -7 になります。計算機はこれをマイナス記号で 10 進数で示しますが、その 2 進数、8 進数、16 進数形式は 2' を使用します。選択した幅内の s-complement パターン、8 ビットで 11111001。負の値とそのビット パターンを並べて見ると、" の抽象的なアイデアがどのように表示されるかになります。符号はちょうど上のビットです" 最後にクリックします。
2 進数を手書きで足したり引いたりして、ここで確認するにはどうすればよいですか?
二進加算は十進と同じキャリー規則に従い、アルファベットは小さくなります。 ゼロ プラス ゼロはゼロ、ゼロ プラス 1 は 1、1 プラス 1 はゼロ キャリー 1、そして 1 プラス 1 プラス 1 は 1 キャリー 1 です。したがって、1010 プラス 1100 は右から列ごとに機能します。 0+0 は 0、1+0 は 1、0+1 は 1、1+1 は 0 キャリー 1、キャリーは先頭ビットになり、10110 が与えられます。これは、10 進数で 22 になります。それを電卓にパンチすると、すべてのベースで一度に確認できるため、面接のために再学習したり、誰かに教えたりするときに、手の算術をチェックする方法です。
減算は two's 補数がそのキープを獲得する場所です.コンピュータは列をまたいで借用するのではなく,負の数を足して減算し,ビットを反転して1 を足して負の数を形成します.それを手で行う必要はほとんどありませんが,計算機が負の領域にきれいに減算できる理由を説明しています:5 マイナス12 は 5 プラス 12 の two's-補数になり,その結果は上記の -7 パターンになります.もし,それに対して計算をせずに,基数間で単一の値を移動させたい場合, ナンバーベースコンバータ はコンパニオンツールであり、 バイナリ トランスレータ 算術ではなくテキストをビットに変える場合を処理します。
ビット単位の演算が実際に重要なのはいつですか?
初心者が予想するよりも頻繁に、そして明らかに " low level." ではない場所で 許可システムは古典的なケースです: 1 つの整数に詰められたフラグのセット、許可を与えるためにOR、それを取り消すための補数付き、そして1 つをテストするためにAND機能トグル、Unixファイルモード、およびハードウェアレジスタマップはすべて同じパターンを使用します.0o755 のような値や、として定義される定数を見たことがある場合 1 << 3、ビット パッキングに会ったことがあります.
XORは安っぽいトリックや実際のアルゴリズムにも同様に現れますビットの切り替えパリティの計算そして古典的な swap-without-a-temp. shiftsは乗算と2 のべき乗で一般的な乗算より遥かに速く分割しいくつかの小さなフィールドを1 つの単語に詰め込み色値やネットワークヘッダーやコンパクトなシリアル化形式が小さいままであるようにスタック全体に絶えず構築されているこれらにぶつかりましたロールフラグをビットマスクとして格納するLaravel APIから詰め込まれた整数からRGBAを読み取るReactキャンバスまで操作を理解することはあらゆる場所で返済される小さな投資であり、これらがどのように広いキットに適合するかについて書きました 開発者の生産性向上ツール ピース.
微妙な失敗は、目に見える電卓を使用する価値があるものです。間違った幅に適用されたマスクは、意図していないビットを静かに保持またはドロップします。 32 ビットを想定したシフトは、64 で異なる動作をします。符号なしマスクに対して符号付き値 ANDed は、2's 補数ビットが表示されるまで不可能に見える数値を生成します。幅を調整しながらビット レイアウトが変更されるのを見ると、それらのバグが謎から明らかな間違いに変わります。
ここにも教えの角度があります.ビットマスクを新しい人に説明すると,10 進数は役に立たない:12 AND 10 being 8 means nothing until you line up 1100 and 1010 and watch the AND keep only the column where both are 1100 and 1010, it does that alignment for you, and the operation stops being a rule to memorize and become something you can see.計算機は10 進数,8 進数, hexの横に2 進数レイアウトを示すので,それはあなたのためにそのアライメントを行い,操作は記憶する規則ではなくなり,あなたが見ることができるものになります.シフトについても同様です,左シフトが1 つずつ1 つずつスライドしながら値を2 倍にすることを示すと,単一の数字では決してできない方法で算術的な意味をビットレベルの仕組みに接続します。
制限は何ですか?また、私のデータは非公開ですか?
算術側には実質的にサイズ制限がない。 calculator は JavaScript' s を使う Bigint の、で標準化された任意精度の整数型 ECMAScriptしたがって、数十桁の数値の加算または乗算は、サイレント オーバーフローがなく正確に進みます。これは、約 15 桁を超えると精度が低下し、大きな整数を正確に表現できない通常の浮動小数点数に基づいて構築された計算機に比べて、真の利点です。
ビット側は、選択した幅によって意図的に制限されます。これは、その点だからです。固定幅の操作は、固定レジスタ内でのみ意味を持ちます。幅よりも大きい値を入力すると、計算機がその幅に縮小して警告するため、切り捨てはサイレントに発生しません。シフトは正気の最大値に制限されるため、暴走シフト量はページをハングアップできません。
プライバシー上では、すべてがブラウザで実行されます あなたが入力したものはアップロード、ログ、または保存されず、ページがロードされた後にインターネットから切断した場合、ツールは機能し続けます それはそれが聞こえるよりも重要です: 人がビットワイズ計算機で実行する値は、多くの場合、許可マスク、トークン、またはシステムからのハードウェアアドレスであり、彼らはむしろ彼らが制御しないサーバーに貼り付けません どのツールがあなたのマシンにデータを保持しているかを気にしている場合、 オンライン ツールのデータ プライバシー ガイドは、クライアント側のツールを電話で自宅にあるツールから区別する方法について説明します。近隣の低レベルの作業の場合、 IEEE 754 コンバーター そして、 アスキーテーブル セットを丸めます.
よくある質問
2 つの2 進数を追加するにはどうすればよいですか?
入力ベースを2 進数に設定し、最初の数値を入力し、Addを選択し、2 番目の数値を入力して結果を読みます たとえば、1010 プラス1100 は10110 で、ツールは10 進数で22、8 進数で26、16 進数で16 の算術演算は任意の長さで正確です。
算術演算とビット演算の違いは何ですか?
算術演算 (加算、減算、乗算、除算、モジュロ) は真の数値に作用し、ビット幅とは無関係です。ビット単位の演算 (AND、OR、XOR、NOT、およびシフト) は固定幅レジスタ内の生のビットに作用するため、その結果は 8 ビット、16 ビット、32 ビット、または 64 ビットのいずれを選択するかによって異なります。
なぜビット幅を選択する必要があるのですか?
NOT およびシフト演算は、レジスタ サイズがわかってからしか答えが定義されません。これは、どのビットが存在し、どのビットが端から落ちるかによって決まるためです。 8、16、32、または 64 ビットを選択すると、計算機は特定の整数型が実際のプログラミング言語でどのように動作するかと一致します。
計算機は否定的な結果をどのように処理しますか?
負の算術結果は 10 進数でマイナス記号で表示され、その 2 進数、8 進数、および 16 進数形式では、選択した幅内で 2' s-complement が使用されます。ビット単位の結果の場合、ツールは符号なし値と符号付き 2' s-complement 値の両方を報告します。
小数に 16 進数を加算するなど、基数を混合できますか?
両方のオペランドは選択した単一の底で読み取られるため、1 つの計算で底を混ぜることはできません。 16 進数と 10 進数を組み合わせるには、まずそのうちの 1 つを変換し、次に両方を同じ底に入力します。結果は常に 4 つの底すべてに表示されます。
分割すると電卓は何をするのでしょうか?
Division は整数商を返し、division が正確でない場合、ツールは剰余をメモとして報告します。剰余を単独で取得するには、代わりに剰余のみを返す Modulo 演算を使用します。
数字はどれくらい大きくなるでしょうか?
算術はJavaScript BigIntを使用するため、数十桁の数字はオーバーフローなしで正確に処理されます。ビット単位の演算は選択した幅によって制限されます。それを超える値はその幅に減らされ、その場合ツールは警告します。
データはどこかに送信されますか?
いいえ すべての計算はブラウザのJavaScriptとして実行されます。入力した内容は送信、ログ、保存されず、ページの読み込み後にインターネットから切断してもツールは動作し続けます。
無料の数学を自分で試してみてください バイナリ計算機。 2 進数、8 進数、10 進数、16 進数にわたる算術演算とビット演算を完全にブラウザで処理し、アップロードされるものは何もありません。



