2进制反码、补码表示方式、规律、原理及js中简单应用(按位非~、number&-number、search、indexOf等方法详解、深度理解)

目录

2进制反码

2进制补码

2进制补码的规律

2进制补码原理

2进制补码js中简单应用

~

number&-number

search、indexOf等方法详解

深度理解链接


2进制反码

反码是基于二进制原码的变动,有两种情况,如果是正数的反码和原码相同。如果是负数的反码,则除了符号位,其他全部取反。
例如:6的反码就是0000 0110;-7的反码就是1111 1001。

2进制补码

补码是基于反码的变动,有两种情况,如果是正数的补码和原码反码都相同。如果是负数的补码,则在其反码的基础上,再加1。

注意:负数的运算都是使用补码进行的
例:6的补码就是0000 0110;--6的补码就是1111 1010。

2进制补码的规律

通过观察我们可以发现6的补码和-6的补码相加为1 0000 0000。

我们再举例15的补码0000 1111,-15的补码1111 0001,相加为1 0000 0000,此时我们可以发现一个规律就是负数的补码加上该正数的原码(等于反码)等于所有位数归零并向前进一位。这里我们可以猜想出来反码补码更像是为负数“服务”的,他们的表示方式都有所不同。

2进制补码原理

首先我们要知道计算机是没有减法运算的,只有加法运算,那计算机怎么实现加法呢?

他是通过加上这数的负数来实现,例如6+-6,实际上是0000 0110 加上1111 1010,但是这2个数要求加上等于0,那么计算机就会将负数进行取反码在加上正数进行运算,由上面规律我们可以得知等于1 0000 0000,而实际上计算机的保存位数是有限的,这就会导致第一位溢出了,取0000  0000即运算后的结果变成了0。

我们也可以从下面这个角度去理解:

将正数转成对应的负数,其实只要用0减去这个数就可以了。比如,-8其实就是0-8。
已知8的二进制是0000 1000,-8就可以用0-8:0000 0000减去0000 1000得出
 00000000
-00001000
---------
这时我们会发现不够减,我们都知道当位不够减的时候,会“借位”,这时就相当于是1 0000 0000减0000 1000了
100000000
-00001000
---------
 11111000
而1 0000 0000等价于1111 1111+1,现在可以拆分成两个式子
 11111111
-00001000
---------
 11110111
+00000001
---------
 11111000
这就是补码的转换步骤
由0减去8得出了-8,也就是补码(-8)和原码(+8)相加的和为0

2进制补码js中简单应用

由上面我们可以得知其实负数在计算机中是以补码的形式去存储的。

~

按位非,~1=-2,计算过程为0000 0001取反等于1111 1110,即等于-2对应的补码,此时我们会发现一个特殊的~-1=0,计算过程为--1的补码为1111 1111 取反等于0000 00000,我们知道JavaScript中String上定义的一些字符串方法,例如search、indexOf等方法,当未匹配到字符串是返回-1,匹配到了返回第一个定位序号,那我们用if判断的时候即可用~search(),当未查询到的时候返回0,查询到了返回其它数。

number&-number

正整数number和自身的相反数求按位与的结果,number最大能被2**n整除。

例如 12最大能2**2(即4)

12 =0000 1100        -12=1000 1100  补码为1111 0011+ 1=1111 0100 

        0000 1100

   &   1111 0100 

——————————

        0000 0100 = 4

search、indexOf等方法详解

JavaScript中常用函数方法(字符串篇)_AIWWY的博客-CSDN博客_js字符串函数

深度理解链接

关于2的补码 - 阮一峰的网络日志

关于补码的理解_From zero-CSDN博客_补码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值