zoukankan      html  css  js  c++  java
  • 经典操作符示例

    经典操作符示例

    1、【~】操作符

    1. var ret = 15;

    2. console.log(ret); //15 
    3. ret = ~ret;
    4. // 00000000 00000000 00000000 00001111  这是正数15在计算机里面的原码(符号位是0)
    5. // 10000000 00000000 00000000 00001111  这是负数15在计算机里面的原码(符号位是1)
    6. // 10000000 00000000 00000000 00010000  减去1后(相当于加负数1)
    7.  
    8. console.log(ret); //-16
    9.  

    2+】转number操作

     

    1. var s ='50';
    2. console.log(typeof s);//string
    3. console.log(s===+s);
    4. //false
    5. s =50;
    6. console.log(s===+s);//true
     

    3+】字符连接

     

    1. console.log(3+5);//8
    2. console.log(3+'5');// '35'
    3. console.log('2'+7);// '27'
    4. console.log(true+false);// 1
    5. console.log(3+null);// 3
     

    4<<】按位左移

     

    1. var val =5;
    2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
    3. //00000000 00000000 00000000 00010100 ← 丢弃左边 右边补0
    4. var ret = val<<2;
    5. console.log(ret);
    6. // 20
    7. val =-5;
    8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
    9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
    10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
    11. //11111111 11111111 11111111 11101100 ← 丢弃左边 右边补0
    12. //10000000 00000000 00000000 00010011 转为反码(符号位不变,其他位取反)
    13. //10000000 00000000 00000000 00010100 转为补码(反码+1)
    14. var ret = val<<2;
    15. console.log(ret);// -20
     
     

    5>>】按位右移

    1. var val =5;
    2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
    3. //00000000 00000000 00000000 00000001 →[01]→丢弃→左边补0
    4. var ret = val>>2;
    5. console.log(ret);
    6. //1
    7. val =-5;
    8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
    9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
    10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
    11. //11111111 11111111 11111111 11111110 →[11]→丢弃→左边补1
    12. //10000000 00000000 00000000 00000001 转为反码(符号位不变,其他位取反)
    13. //10000000 00000000 00000000 00000010 转为补码(反码+1)
    14. var ret = val>>2;
    15. console.log(ret);// -2
     

    6>>>】按位无符号右移

     

    1. var val =5;
    2. //00000000 00000000 00000000 00000101 这是正数5在计算机里面的原码(符号位是0)
    3. //00000000 00000000 00000000 00000001 →[01]→丢弃→左边补0
    4. var ret = val>>>2;
    5. console.log(ret);
    6. //1
    7. val =-5;
    8. //10000000 00000000 00000000 00000101 这是负数5在计算机里面的原码(符号位是1)
    9. //11111111 11111111 11111111 11111010 这是负数5在计算机里面的反码(符号位不变,其他位取反)
    10. //11111111 11111111 11111111 11111011 这是负数5在计算机里面的补码(反码+1)
    11. //00111111 11111111 11111111 11111110 →[11]→丢弃→左边补0
    12. var ret = val>>>2;
    13. console.log(ret);// 1073741822
     

    7【in】判断属性的归属

    1. var obj ={ x:20, y:30}; 
    2. console.log('x' in obj); //true 注意必须加引号
    3. console.log('y' in obj); //true 注意必须加引号
    4. console.log('z' in obj); //false 注意必须加引  var arr = [2,'a',5];//该数组的索引是:0、1、2 
    5. console.log(0 in arr);   //true  
    6. console.log('0' in arr); //true 
    7. console.log(1 in arr);   //true  
    8. console.log('1' in arr); //true 
    9. console.log(2 in arr);   //true  
    10. console.log('2' in arr); //true  
    11. console.log(5 in arr);   //false 因为没有5这个索引
    12. console.log('5' in arr); //false 因为没有5这个索引
     

    8==】和【===

     //思考一下,它如何比较? 

    //如果以布尔型比较,则两个操作数都需要转换 

    //如果以字符型比较,则只需要把0转换为'0'即可,发现不可能 

    //如果以数字型比较,则只需要吧''转换为0即可。

     //通过对象,它是以数字型去比较。 

    1. console.log(0=='');//true 
    2. //不转型,直接比较 
    3. console.log(0==='');//false
    4.  
    5. console.log(null==undefined);//true 【==】操作符先把null和undefined都转型为false后才比较。
    6. console.log(null===undefined);//false 【===】操作符直接比较,不做转型。
    7. //无论如何比较,NaN都不等于它本身。
    8. console.log(NaN==NaN);//false  
    9. console.log(NaN===NaN);//false //怎么理解?//你可以把NaM它想象为字面量对象,//每当你写下一个字面量对象的时候,//它都是世界上独一无二的!
    10. console.log({x:1,y:2}=={x:1,y:2}); //false
    11. console.log({x:1,y:2}==={x:1,y:2});//false
     

    9、三元运算

     

    1. //当第一个表达式是真值的时候,
    2. //返回表达式2,否则返回表达式3
    3. var rs =0?'真值':'假值';
    4. console.log(rs);// '假值'
     
     

    10delete操作符

    1. //示例:删除对象属性
    2. var obj ={ a:2, b:3, c:4, d:5};
    3. console.log(obj);
    4. //Object {a: 2, b: 3, c: 4, d: 5}
    5. var rt =delete obj['c'];
    6. // 或者这样:delete obj.c;
    7. console.log(obj);//Object {a: 2, b: 3, d: 5}
    8. var rs ='c' in obj;
    9. console.log(rs);//false
    10. //示例:删除数组元素
    11. var arr =['a','b','c',4,5,6];
    12. console.log(arr);// ["a", "b", "c", 4, 5, 6]
    13. var rs =delete arr[2];//删除第三个元素,即c元素
    14. console.log(arr);// IE:a,b,,4,5,6 chrome:["a", "b", 3: 4, 4: 5, 5: 6]
     

    11debugger

     

    1. function fn(a){
    2. if(!a){
    3. debugger;
    4. //相当于在这一行手动打了个断点
    5. var a,b=3;
    6. console.log(b);
    7. }}
    8. fn(0);

    1. publicclass A{
    2. publicstaticvoid main(String[] args){
    3. int a=10;
    4. System.out.println(~a);
    5. }
    6. }
    7. //输出结果为-11(~是按位取反操作符)
     

    此题输出结果为什么是-11呢?要解决此问题,

           得明白整型在计算机是怎么存储的,

           它是以二进制补码形式存储的,占4个字节即32位。

      10二进制表示为: 00000000 00000000 00000000 00001010 (第一位代表符号位,0为正,1为负)

      10补码保持不变: 00000000 00000000 00000000 00001010

    ~10二进制表示为: 11111111 11111111 11111111 11110101

    ~10补码取反加1为:10000000 00000000 00000000 00001011(负数第一位符号位保留)

     即结果为-11





  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/moyuling/p/d259b06c8789d471bd078fb87c8b6cd6.html
Copyright © 2011-2022 走看看