按位取反~ 详解-女黑客 - Powered by Discuz! Archiver

nvhack 发表于 2018-10-16 23:09:22

按位取反~ 详解

读本文前请首先搞懂“反码”,“取反”,“按位取反(~)”,这3个概念是不一样的。取反:0变1,1变0
反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)按位取反(~): 这将是下面要讨论的。~ 运算符查看表达式的二进制表示形式的值,并执行位非运算。
表达式中的任何一位为 1,则结果中的该位变为 0。 表达式中的任何一位为 0,则结果中的该位变为 1。
下面的示例阐释了位非 (~) 运算符的用法,其中包含二进制表示十进制负数的,如果不熟悉这个请先看懂《十进制负数转换为二进制、八进制、十六进制》。
复制代码 代码如下:
var temp = ~5;
/*
5 二进制 101,补满 32位
00000000000000000000000000000101
一,按位取反
11111111111111111111111111111010
二,由于32位开头第一个是1,所以这是一个负数,将二进制转换成负数,需要先反码
00000000000000000000000000000101
之后,再+1
00000000000000000000000000000110
转换成十进制为6,加上符号变成负数 -6
*/
alert(temp);
// 弹出【-6】
页: [1]
查看完整版本: 按位取反~ 详解