ホームページ >ウェブフロントエンド >jsチュートリアル >JS演算子「!~」の詳細説明
この記事では主にjavascript演算子を詳しく紹介していますが、これは最も基本的で見落としがちなことですが、私はそう聞かれると笑ってしまいます。 。
もうすぐ旧正月休暇で、ようやく自由になりました。私は毎日さまざまな技術記事を閲覧していますが、この状態は素晴らしいです。
午後、jsに関する記事を読んでいて、次の文章が目に留まりました。
コードは次のとおりです:
(function () { var names = []; return function (name) { addName(name); } function addName(name) { if (!~names.indexOf(name))//如果存在则不添加 names.push(name); console.log(names);// ["linkFly"] } }())('linkFly');
if (!~names.indexOf(name)) 演算子「!~」の意味がわからない場合は、~ から始めてください。
テストでは、結果の値がこのパターンであることがわかります - (X+1)
検索後、一部の記事は 1 文だけ欠落しています: 2 進数を否定します
文字通り、8 桁の 2 進数で表されます: 3=00000011 の場合、~3=11111100 となります。上記の式を適用するのは間違いです。
上記の説明はまだ抽象的すぎて具体的ではありません。実際、これには元のコード、逆コード、および補コードの知識が必要です。
元のコード
元のコード表現の最上位ビットは符号ビットです。このビットは、正の数の場合は 0、負の数の場合は 1 です。残りのビットは数値の絶対値を表します。
1 の補数コード
符号付き数値の場合、正の数値の 1 の補数は元のコードと同じです。負の数値の 1 の補数は、符号ビットを除く元のコードのすべてのビットをビットごとに反転したものです。補数コードは、補数コードを見つけるプロセスの中間形式としてよく使用されます。
補数コード
正の数の補数コードは、元のコードと補数コードと同じです。負の数の補数コードは、元のコードの符号ビットを除くすべてのビットを反転し、最後のビットに 1 を加算することによって得られます。 、これは数値の補数であり、コードに 1 を追加します。コンピュータの数値は通常、2 の補数形式で表されます。補数コードでは、(-0)D の代わりに (-128)D が使用されます。(-128)D には対応する元のコードと補数コードがありません。(-128)D = (1000,0000)B。
補数演算
補数演算では符号ビットは考慮されません。元のコードの各ビットを反転し、最後のビットに 1 を加算することによって得られます。数値の補数はその反対の数値の補数です。
著者の記事の例を取ると、
~はビットごとの否定を意味し、それが00111であれば11000(ビットごとの否定)になることを意味します。ビット単位の否定後の 2 進数 (~57): 11000110 これは 10 進数で表されます: -70
これは負の数であり、コンピューターでは負の数は補数で表されます: 補数 = 符号ビットがビット単位で反転された後、加算します。 1.だから -70 (11000110) 符号ビットをビット反転すると (10111001) 1を足すと (10111010) になります
10 進数に変換すると -58
だから ~57 =-58
ようやく理解できました。要約された式はすぐに結果を生み出すことができますが、技術者として私たちは詳細を掘り下げることを好みます。
以上がJS演算子「!~」の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。