带你读书之“红宝书”:第三章 语法基础(中)之 3.5操作符②

简介: 带你读书之“红宝书”:第三章 语法基础(中)之 3.5操作符②

写在前头

大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。


注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。


思维导图

9ba63491c5704064959f8112b1089def_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg


脉络 3.5操作符

这小节就是介绍了3.5操作符


3.5操作符

96e8e6ff7db94a7ea10130cc70e8975f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


简述

操作符,顾名思义就是用来操作数据值的一种符号。书上的解释也很详细,还涉及了使用方法转换对象,以便操作。


3.5.3. 乘性操作符

125a99b5aa554fbb8e270722f4049975_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


和之前加性操作符类型差不多,都是和数学知识差不多,但是得记住一下特别的。书中讲了这些例子。


  1. 乘法操作符
  • 计算两个数值的乘积

同数学乘法类似。

  • 处理特殊值
    ① 如果有不是数值的操作数,则先在后台用 Number()将其转换为数值,然后再应用上述规则。 ②如果 ECMAScript 不能表示乘积,则返回 Infinity 或-Infinity。
```JavaScript
  <script>
      console.log(2 * 3); // 6
      console.log(NaN * 3); // NaN 
      console.log(Infinity * 3); // Infinity
      console.log(Infinity * -3); // -Infinity
      console.log(Infinity * Infinity); //Infinity 
      console.log('2' * 3); // 6
  </script>
复制代码


复制代码


  1. 除法操作符
  • 计算第一个操作数除以第二个操作数的商


同数学除法类似。

  • 处理特殊值
<script>
        console.log(3 / 2); // 1.5 c语言是1,js不取整
        console.log(NaN / 2); // NaN 
        console.log(Infinity / Infinity); // NaN 
        console.log(0 / 0); // NaN
        console.log(3 / 0); // Infinity 
        console.log(-3 / 0); // -Infinity
    </script>
复制代码


  1. 取余操作符
  • 数值
<script>
        console.log(26 % 3); // 2
 </script>
复制代码


  • 处理特殊值
<script>
        console.log(Infinity % 3); // NaN
        console.log(-Infinity % 3); // NaN
        console.log(888 % 0); // NaN
        console.log(Infinity % Infinity); // NaN
        console.log(888 % Infinity); // 888
        console.log(888 % -Infinity); // 888
        console.log(0 / 8); // 0
    </script>
复制代码


3.5.4. 指数操作符

1629a4e0fe8247a5a5d236ccaf575100_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • Math.pow()自己的操作符(2个**)
<script>
        console.log(3 ** 2); // 9
        console.log(Math.pow(3, 2)); // 9
 </script>
复制代码


3.5.5. 位操作符

dc6db59ed13c4646b05bf6c6d3e087e3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


基本原理

  • 二进制编码存储

所有的计算机存储的内容最终都是二进制构成的。

  • 32 位转换为 64 位

64位转换为32位,位操作符执行,再32位转换64位。这里我觉得书也得很好,我自己也讲不好。多看书吧。

  • 副作用
    特殊值 NaN 和 Infinity在位操作中都会被当成 0 处理。
    注意:输出负数时,是对应进制的正数再带一个负号。
let num = -18;
console.log(num.toString(2)); // '-10010'
复制代码


1. 按位非

  • 是二进制数学操作符
  • 返回数值的一补数

32位每一位0换1,1换0。

  • 位操作的速度快

原因:位操作是更底层的操作比加性操作符等等更快。

  • 两个按位非操作符效果上等同于 Math.trunc()
function test = (number) => ~~number === Math.trunc(number);
console.log(test(1.05)); // true
console.log(test(-1.05)); // true
// 不同之处
console.log(Math.trunc(NaN)); // NaN
console.log(~~NaN); // 0
console.log(Math.trunc(Infinity)); // Infinity
console.log(~~Infinity); // 0
复制代码


2. 按位与

有0则0 在两个位都是 1 时返回 1,在任何一位是 0 时返回 0


3. 按位或

有1则1:至少一位是 1 时返回 1,两位都是 0 时返回 0


4. 按位异或

同0异1:比对同样两个值执行按位或操作得到的结果小 1


5. 左移

按照指定的位数将数值的所有位向左移动,左移会以 0 填充这些空位,让结果是完整的 32 位数值。


6. 有符号右移

  • 会将数值的所有 32 位都向右移,同时保留符号。
  • 左移的逆运算
  • 会用符号位的值来填充这些空位


7. 无符号右移

  • 会将数值的所有 32 位都向右移
  • 无符号右移会给空位补 0,而不管符号位是什么。



目录
相关文章
|
弹性计算 分布式计算 监控
ECS飘移问题之飘移无法实现如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
测试技术 数据库
腾讯游戏测试工程师的经验心得分享
腾讯游戏测试工程师的经验心得分享
629 0
|
机器学习/深度学习 算法 数据挖掘
【2024 华数杯 国际数学建模竞赛】B题 Photovoltaic Power光伏发电 34页论文及python 代码
本文通过建立数学模型和应用多种数据分析方法,研究了中国电力供应与光伏发电的发展趋势、光伏电站建设的可行性、中国光伏发电的最大潜力、清洁能源替代燃煤发电的可能性,以及光伏发电在实现国家碳中和战略目标中的作用,并提出了相关政策建议。
295 4
【2024 华数杯 国际数学建模竞赛】B题 Photovoltaic Power光伏发电 34页论文及python 代码
|
10月前
|
安全 JavaScript API
阿里云短信服务 5 大优势
选择阿里云短信服务的 5 大理由
432 15
阿里云短信服务 5 大优势
|
12月前
|
JavaScript 开发者
|
机器学习/深度学习 数据采集 PyTorch
高效数据加载与预处理:利用 DataLoader 优化训练流程
【8月更文第29天】 在深度学习中,数据加载和预处理是整个训练流程的重要组成部分。随着数据集规模的增长,数据加载的速度直接影响到模型训练的时间成本。为了提高数据加载效率并简化数据预处理流程,PyTorch 提供了一个名为 `DataLoader` 的工具类。本文将详细介绍如何使用 PyTorch 的 `DataLoader` 来优化数据加载和预处理步骤,并提供具体的代码示例。
2061 1
|
XML 安全 Java
【分布式技术专题】「单点登录技术架构」一文带领你好好对接对应的Okta单点登录实现接口服务的实现落地
【分布式技术专题】「单点登录技术架构」一文带领你好好对接对应的Okta单点登录实现接口服务的实现落地
727 0
|
Linux 虚拟化 网络架构
Linux命令`arch`详解
`arch`命令在Linux中用于显示系统CPU架构,如x86_64、ARM等。它在跨平台编程、软件包管理和系统故障排除时很有用。通过`arch`,用户能得知系统运行的架构,但注意这可能与物理CPU架构不同,尤其是在虚拟环境中。在某些系统中,`arch`可能是`uname`命令的别名。了解CPU架构对有效管理系统至关重要。
|
存储 Java 编译器
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
心得经验总结:源代码、目标代码、可执行代码、本地代码的区别
534 0
|
存储 安全 数据库
自动化密码填充:使用Python提高日常工作效率
自动化密码填充:使用Python提高日常工作效率
275 0