zoukankan      html  css  js  c++  java
  • javascript的位操作、整数、二进制

      位与(x&y):对操作数进行二进制与的操作,如果两个操作数的某一位两个都为1,将对应的结果位设为1。

        0x0007 0x0003 = 0x0003

      

      一个小型年老棕色的狗:64 + 16 + 8 + 2 = 90 

      搜索一个有特定标记的宠物,只需要和搜索值进行位与操作。

    //搜索大型 年轻 白色的宠物
    var searchFlags = 128 + 32 + 4;
    var pets = []; //宠物
    var numPets = pets.length;
    for(var i = 0; i < numPets; i++){
    	if(searchFlags & pets[i].flags === searchFlags){
    
    	}
    }
    

       位或(x|y):对操作数进行二进制或的操作,如果两个操作数的某一位只要有一个为1,将对应的结果位设为1。

        0x0007 0x0003 = 0x0007

      位异或(x^y):对操作数进行二进制异或的操作,如果两个操作数的某一位只有一个为1,将对应的结果位设为1。

        0x0001 0x0000 = 0x0001    0x0001 ^ 0x0001 = 0x0000

    //toggle在0和1之间转换(假设开始toggle等于0或者1)
    toggle ^= 1;
    toggle = toggle ? 0 : 1;
    

       位非(~x):对所有位进行取反(如果操作数是有符号整数(最左位为符号位),则~操作符等于取负减1)。

        11100111 取反为 00011000

      位左移(x<<numBits):对x的二进制向左移numBits位。所有位向左移,最左位丢失,0填补最右的位。等价于无符号整数的乘法 x*(2^numBits) 

    y = 5 << 1; // y=10; => Math.floor(5*(2^1))
    y = 5 << 2; // y=20; => Math.floor(5*(2^2))
    y = 5 << 3; // y=40; => Math.floor(5*(2^3))
    

       算术位左移(x>>numBits):对x的二进制向右移numBits位。除了最左符号位,所有位向右移,最右位丢失。等价于有符号整数的除法 x/(2^numBits) 

    y = 5 >> 1; // y=5; => Math.floor(5/(2^1))
    y = 5 >> 2; // y=2; => Math.floor(5/(2^2))
    y = 5 >> 3; // y=1; => Math.floor(5/(2^3))
    
    x = y >> 0; //是一个快速的 x = Math.floor(y)
    
  • 相关阅读:
    centos7刚安装解决网络问题
    python matplotlib的常用绘图方法
    python实现最小可编辑距离
    JDBC快速入门
    关于MYSQL常用操作查询语言
    3w字详解java集合
    ELK实时日志分析平台环境部署--完整记录(转)
    ELK简介(转)
    python格式化输出(% & format)
    ElasticSearch查询 搜索 | 更新 | 查询
  • 原文地址:https://www.cnblogs.com/eyeear/p/4651509.html
Copyright © 2011-2022 走看看