JS演算子「!~」の詳細説明

怪我咯
怪我咯オリジナル
2017-07-04 15:22:003190ブラウズ

この記事では主に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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。