もうすぐ旧正月休暇ですが、ようやく自由になりました。毎日様々な技術記事を閲覧していると、この状態は素晴らしいですね。
午後、jsに関する記事を読んでいて、次の文章が目に留まりました。
if (!~names.indexOf(name)) の演算子「!~」は何を意味しますか?理解できない場合は、~ から始めましょう。
テストでは、結果の値がこのパターン - (X 1) であることがわかります
検索した結果、一部の記事では 1 文だけが失われていました: 2 進数の否定
文字通り、ここでは 8 桁の 2 進数で表されます: 3=00000011、次に ~3=11111100 です。上記の式を適用するのは間違いです。
上記の説明はまだ抽象的で具体的ではありません。実際、これには元のコード、逆コード、および補完コードの知識が必要です。
元のコード
元のコード表現の最上位ビットは符号ビットです。このビットは、正の数の場合は 0、負の数の場合は 1 です。残りのビットは数値の絶対値を表します。
逆コード
符号付き数値の場合、正の数値の 1 の補数は元のコードと同じです。負の数値の 1 の補数は、符号ビットを除く元のコードのすべてのビットをビットごとに反転したものです。補数コードは、補数コードを見つけるプロセスの中間形式としてよく使用されます。
補数コード
正の数の補数は元のコードと同じであり、負の数の補数は、符号ビットを除く元のコードのすべてのビットを反転し、最後のビットに 1 を加算することによって得られます。数値プラス 1。コンピュータの数値は通常、2 の補数形式で表されます。補数コードでは、(-0)D の代わりに (-128)D が使用されます。(-128)D には対応する元のコードと補数コードがありません。(-128)D = (1000,0000)B。
補数演算
補数演算では符号ビットは考慮されません。元のコードの各ビットを反転し、最後のビットに 1 を加算することによって得られます。数値の補数はその反対の数値の補数です。
理解するために著者の記事を例として挙げてください
~ はビット単位の否定を意味します。否定は、00111 の場合は 11000 (ビット単位の否定) を意味します。
57 の 2 進表現は (1 バイト): 00111001
ビットごとの否定後の 2 進数表現 (~57): 11000110 これを 10 進数で表すと: -70
これは符号付きの数値であり、負の数値はコンピューターでは補数で表されます。補数 = 符号ビットの後にビット単位の反転が追加され、
が追加されます。
したがって、-70(11000110)の符号ビットをビット反転すると(10111001)となり、1を加えると(10111010)となります
10 進数に変換:-58
したがって~57=-58
ため息タイム:
基礎は上記すべての基礎です。もしあなたが道を修めることに専念するなら、その道は長くなります。
以上がこの記事の全内容です。この記事から何かを得ることができれば幸いです。