• 重要但是少用的运算符


    先了解

    1.原码,反码,补码

    正数的反码和补码都与原码相同。
    负数的反码为对该数的原码除符号位外各位取反。
    负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1   

    2. 负数在计算机中是怎么存的

    首先声明在计算机中负数的存储是采用二进制补码的形式的
    以-3为例,32位为基础:
    原码:00000000 00000000 00000000 00000011
    反码:11111111 11111111 11111111 11111100
    补码:11111111 11111111 11111111 11111101

    1. 按位与运算符 &

    对两个表达式执行按位"与"。
    每一个位执行按位“与”运算。 如果两个位均为 1,则结果是 1。 否则,结果为 0。

    / 9 is 00000000000000000000000000001001
    var expr1 = 9;
    // 5 is 00000000000000000000000000000101
    var expr2 = 5;
    // 1 is 00000000000000000000000000000001
    var result = expr1 & expr2;
    document.write(result);
    // Output: 1
    

    2.按位或运算符 |

    对两个表达式执行按位“或”运算。
    任何时候,只要其中任意一个表达式有一位为 1,则结果中的该位即为 1。否则,结果中的该位将为 0。

    7|11
    // 15
    7:   00000111
    11:  00001011
    7|11:00001111
    

    3.按位异或运算符 ^

    对两个表达式执行按位“异或”运算。
    当且仅当只有一个表达式的某位为 1 时,结果中的该位才为 1。否则,结果中的该位为 0。

    5^12
    //9
    0101   (expression1)
    1100   (expression2)
    ----
    1001   (result)
    

    4.按位取反运算符 ~

    所有一元运算符(如 ~ 运算符)都按照下面的规则来计算表达式的值:

    • 如果应用于未定义的表达式或 null 表达式,则会引发一个运行时错误。
    • 将对象转换为字符串。
    • 如果可能,将字符串转换为数字。否则,将引发运行时错误。
    • 布尔值被视为数字(如果为 false,则为 0;如果为 true,则为 1)。


      运算符将应用于结果数字。
      ~ 运算符查看表达式的二进制表示形式的值,并执行位非运算。
      表达式中的任何一位为 1,则结果中的该位变为 0。表达式中的任何一位为 0,则结果中的该位变为 1。
      下面的示例阐释了位非 (~) 运算符的用法。
    var temp = ~5;
    
    表达式 二进制值(2 的补数) 十进制值
    5 00000000 00000000 00000000 00000101 5
    ~5 11111111 11111111 11111111 11111010 -6

    可以总结为: ~a = -(a+1)

    5.按位左移运算符 <<

    左移表达式的位。

    var temp
    temp = 14 << 2
    //变量 temp 的值为 56,因为 14(即二进制的 00001110)左移
    //两位等于 56(即二进制的 00111000)
    

    6.按位右移运算符 >>

    右移表达式的位,保持符号不变。

    var temp
    temp = -14 >> 2
    //temp 的值为 -4:因为 -14(即二进制的 11110010)右移两位后等于 -4(即二进制的 11111100)。
    

    如果有疑问,参考文章开头 负数在计算机中是怎么存的

    7.无符号右移位运算符 >>>

    变量值右移表达式值指定的位数,但不保持符号,并将结果赋给该变量。

    var temp
    temp = -14
    temp = temp >>> 2
    

    变量 temp 的初始值为 -14(二进制补码为 11111111 11111111 11111111 11110010)。向右移两位后,该值等于 1073741820(二进制为 00111111 11111111 11111111 11111100)。
    怎么换算 00111111 11111111 11111111 11111100 为 十进制,parseInt('00111111 11111111 11111111 11111100',2)

    8. 逗号运算符 ,

    顺序执行两个表达式。
    , 运算符会导致按从左到右的顺序执行表达式。 , 运算符的常见用法是在 for 循环的增量表达式中使用。例如:

    j=25;
    for (i = 0; i < 10; i++, j++)
    {
       k = i + j;
    }
    

    for 语句只允许在每次通过循环的结尾时执行单个表达式。 , 运算符允许将多个表达式视为单个表达式,因此这两个变量都可以递增。
    其实,正常的语句也是可以执行的,比如: console.log(a),alert('1')

    9. void 运算符

    禁止表达式返回值。
    void 运算符计算其表达式,并返回 undefined。 当应计算表达式,但又不希望脚本的其他部分看见其结果时,该运算符很有用。


    > [javascript 运算符](https://msdn.microsoft.com/zh-cn/library/ce57k8d5(v=vs.94).aspx)
  • 相关阅读:
    Python全栈day19(函数补充)
    Python全栈day18(三元运算,列表解析,生成器表达式)
    Python全栈day18(迭代器协议和for循环工作机制)
    KVM虚拟化
    Python使用函数实现把字符串转换成整数
    MySQL备份1356错误提示修复办法
    Python全栈day17(文件处理)
    CentOS添加PHP至环境变量
    CentOS7.2编译配置LNMP环境(MySQL5.7.20,PHP7.0.24)
    php查询mysql数据库 查询条件替中文字符串变量时无法查询
  • 原文地址:https://www.cnblogs.com/cloud-/p/7690854.html
Copyright © 2020-2023  润新知