Detailed explanation of JS operator '!~'
This article mainly introduces in detail the javascriptoperator"!~", the most basic and easiest thing to ignore. After working for several years, even the basics are gone. When people ask, they will laugh generously.
It’s almost the New Year’s holiday, and I’m finally free. I browse various technical articles every day, and this state is great.
I read an article about js in the afternoon, and the following paragraph caught my attention.
The code is as follows:
(function () { var names = []; return function (name) { addName(name); } function addName(name) { if (!~names.indexOf(name))//如果存在则不添加 names.push(name); console.log(names);// ["linkFly"] } }())('linkFly');
What does the operator "!~" in if (!~names.indexOf(name)) mean? If you don’t understand, start with ~.
The test can show that the result value has this pattern - (X+1)
Search , and some articles only miss one sentence: negate the binary digit.
Literally, here it is expressed in eight-digit binary: 3=00000011, then ~3=11111100, it is wrong to apply the above formula.
The above explanation is still too abstract and not concrete. In fact, this involves the knowledge of original code, inverse code, and complement code.
Original code
The highest bit of the original code representation is the sign bit. This bit is 0 for positive numbers and 1 for negative numbers. The remaining bits represent the absolute value of the number.
Inverse code
For a signed number, the inverse code of a positive number is the same as its original code; the inverse code of a negative number is the bitwise inversion of all bits of the original code except the sign bit. The complement code is often used as an intermediate form in the process of finding the complement code.
Complement code
The complement code of a positive number is the same as its original code and complement code; the complement code of a negative number is obtained by inverting all bits of its original code except the sign bit and adding 1 to the last bit, which is Add 1 to the number's complement. Numbers in computers are generally represented in two's complement form. In the complement code, (-128)D is used instead of (-0)D. Note that: (-128)D has no corresponding original code and complemented code, (-128)D = (1000,0000)B.
Complement operation
The complement operation does not consider the sign bit, it is obtained by inverting each bit of its original code and adding 1 to the last bit. The complement of a number is the complement of its opposite.
Take the example of the author's article and understand that
~ means bitwise negation. Negation means that if it is 00111, it becomes 11000 (bitwise negation)
## The binary representation of #57 is (1 byte): 00111001The binary representation after bitwise inversion (~57): 11000110 This representation is decimal: -70
This is a negative number and a signed number , negative numbers should be represented by their complement in computers: complement = bitwise inversion after the sign bit and then adding 1.
So -70 (11000110) after bitwise inversion of the sign bit is (10111001) plus 1 is (10111010)
converted to decimal: -58
Therefore ~57=-58
The above is the detailed content of Detailed explanation of JS operator '!~'. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PyCharm is a very popular Python integrated development environment (IDE). It provides a wealth of functions and tools to make Python development more efficient and convenient. This article will introduce you to the basic operation methods of PyCharm and provide specific code examples to help readers quickly get started and become proficient in operating the tool. 1. Download and install PyCharm First, we need to go to the PyCharm official website (https://www.jetbrains.com/pyc

sudo (superuser execution) is a key command in Linux and Unix systems that allows ordinary users to run specific commands with root privileges. The function of sudo is mainly reflected in the following aspects: Providing permission control: sudo achieves strict control over system resources and sensitive operations by authorizing users to temporarily obtain superuser permissions. Ordinary users can only obtain temporary privileges through sudo when needed, and do not need to log in as superuser all the time. Improved security: By using sudo, you can avoid using the root account during routine operations. Using the root account for all operations may lead to unexpected system damage, as any mistaken or careless operation will have full permissions. and

Presumably many users have several unused computers at home, and they have completely forgotten the power-on password because they have not been used for a long time, so they would like to know what to do if they forget the password? Then let’s take a look together. What to do if you forget to press F2 for win10 boot password? 1. Press the power button of the computer, and then press F2 when turning on the computer (different computer brands have different buttons to enter the BIOS). 2. In the bios interface, find the security option (the location may be different for different brands of computers). Usually in the settings menu at the top. 3. Then find the SupervisorPassword option and click it. 4. At this time, the user can see his password, and at the same time find the Enabled next to it and switch it to Dis.

LinuxDeploy operating steps and precautions LinuxDeploy is a powerful tool that can help users quickly deploy various Linux distributions on Android devices, allowing users to experience a complete Linux system on their mobile devices. This article will introduce the operating steps and precautions of LinuxDeploy in detail, and provide specific code examples to help readers better use this tool. Operation steps: Install LinuxDeploy: First, install

With the popularity of smartphones, the screenshot function has become one of the essential skills for daily use of mobile phones. As one of Huawei's flagship mobile phones, Huawei Mate60Pro's screenshot function has naturally attracted much attention from users. Today, we will share the screenshot operation steps of Huawei Mate60Pro mobile phone, so that everyone can take screenshots more conveniently. First of all, Huawei Mate60Pro mobile phone provides a variety of screenshot methods, and you can choose the method that suits you according to your personal habits. The following is a detailed introduction to several commonly used interceptions:

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

1. Introduction to PDO PDO is an extension library of PHP, which provides an object-oriented way to operate the database. PDO supports a variety of databases, including Mysql, postgresql, oracle, SQLServer, etc. PDO enables developers to use a unified API to operate different databases, which allows developers to easily switch between different databases. 2. PDO connects to the database. To use PDO to connect to the database, you first need to create a PDO object. The constructor of the PDO object receives three parameters: database type, host name, database username and password. For example, the following code creates an object that connects to a mysql database: $dsn="mysq

Table of Contents Astar Dapp Staking Principle Staking Revenue Dismantling of Potential Airdrop Projects: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Staking Strategy & Operation "AstarDapp Staking" has been upgraded to the V3 version at the beginning of this year, and many adjustments have been made to the staking revenue rules. At present, the first staking cycle has ended, and the "voting" sub-cycle of the second staking cycle has just begun. To obtain the "extra reward" benefits, you need to grasp this critical stage (expected to last until June 26, with less than 5 days remaining). I will break down the Astar staking income in detail,
