js中 ~(按位非)运算符妙用

127 篇文章 2 订阅
62 篇文章 1 订阅

转载:https://www.aliyun.com/jiaocheng/363385.html

  • 摘要:基础知识:某个数值的按位非操作,可以简单的理解为该值取负值后减1例如:~5=-5-1=-6~-5=5-1=4~4=-4-1=-5原理:二进制数的负数是取该二进制数的补码,然后+1。二进制数,最高位为0表示正数,最高位为1表示负数。(最高位分不同情况存储不一样)5的二进制表示:00000101(假设最高位为8位)补码:11111010-5:11111011(~)按位非操作其实就是取补码的过程,也就是上述求该值负数的逆过程,所以可以简单的理解为该值取负值后减1。5的补码就是~5,

  • 基础知识: 

    某个数值的按位非操作,可以简单的理解为该值取负值后减1
    例如:
    ~5 = -5-1 = -6
    ~-5 = 5-1 = 4
    ~4 = -4-1 = -5


    原理: 

    二进制数的负数是取该二进制数的补码,然后+1。
    二进制数,最高位为0表示正数,最高位为1表示负数。(最高位分不同情况存储不一样)
    5的二进制表示:00000101 (假设最高位为8位)
    补码:11111010
    -5:11111011

     

    (~)按位非操作其实就是取补码的过程,也就是上述求该值负数的逆过程,所以可以简单的理解为该值取负值后减1。

     

    5的补码就是~5,那么~5+1 = -5,所以~5 = -5-1 = -6


    应用: 
    1、indexOf() 

    判断数组或者字符串中是否存在某个元素,一般使用indexOf()如下:


    if(str.indexOf(query) != -1) {} 
    if(str.indexOf(query) >= 0) {} 

    现在可以更加清爽和高端的写成:


    if(~str.indexOf(query)) {} 

    原理:
    不存在返回-1,~-1 = 0 ,大于-1的值,0,1,2,3 ... 按位非的值1,2,3,4...都大于0

     

    ps: 这种写法可不仅仅的B格高这么简单,位运算相对于比较运算符效率高,对于一次运算本身来说,可能相差无几,但在循环次数过大,比如超过了10000000次,效率就会有差距。


    2、~~value的使用 

    对于浮点数,~~value可以代替parseInt(value),而且前者效率更高些


    parseInt(-2.99) //-2 
    ~~(-2.99) //-2 

    ps: 这些技巧可能会给阅读代码的同学造成困扰,如果不知道原理的话,甚至让人费解。因此平时写代码的时候,要根据情况决定采用哪种写法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值