JavaScript演算子「!~」を詳しく解説_基礎知識

WBOY
リリース: 2016-05-16 16:15:01
オリジナル
1466 人が閲覧しました

もうすぐ旧正月休暇ですが、ようやく自由になりました。毎日様々な技術記事を閲覧していると、この状態は素晴らしいですね。

午後、jsに関する記事を読んでいて、次の文章が目に留まりました。

コードをコピーします コードは次のとおりです:

(関数() {
var names = [];
戻り関数 (名前) {
addName(名前);
}
関数 addName(name) {
If (!~names.indexOf(name))//存在する場合は、
を追加しないでください names.push(name);
console.log(names);// ["linkFly"]
}
}())('リンクフライ');

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

今、ようやく理解できました。要約された式はすぐに結果を生み出すことができますが、技術者として私たちは詳細を掘り下げることを好みます。

ため息タイム:

基礎は上記すべての基礎です。もしあなたが道を修めることに専念するなら、その道は長くなります。

以上がこの記事の全内容です。この記事から何かを得ることができれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート