TypeScript位运算

参考文献:
https://blog.csdn.net/xuaner8786/article/details/138858747
https://www.runoob.com/typescript/ts-operators.html

位运算符

TypeScript 中的位运算符用于在二进制位级别上操作数字。这些运算符在处理整数和底层系统编程时特别有用。以下是一些使用 TypeScript 位运算符的示例代码:
在这里插入图片描述
在这里插入图片描述

let a: number = 60; // 二进制表示为 0011 1100
let b: number = 13; // 二进制表示为 0000 1101

// 位与(&)
let c: number = a & b; // 只保留两个数都为 1 的位,结果为 12(0000 1100)
console.log(c); // 输出 12

// 位或(|)
let d: number = a | b; // 只要两个数中任一数为 1 的位,结果就是 1,结果为 61(0011 1101)
console.log(d); // 输出 61

// 位异或(^)
let e: number = a ^ b; // 当两个数相应位不同时结果为 1,相同则为 0,结果为 49(0011 0001)
console.log(e); // 输出 49

// 位非(~)
let f: number = ~a; // 反转每一位,结果取决于数字的长度和表示方式(通常是有符号 32 位整数),这里可能是 -61
console.log(f); // 输出 -61,具体值取决于系统的位表示和整数大小

// 左移(<<)
let g: number = a << 2; // 将 a 的所有位向左移动 2 位,相当于乘以 2^2(4),结果为 240(1111 0000)
console.log(g); // 输出 240

// 右移(>>)
let h: number = a >> 1; // 将 a 的所有位向右移动 1 位,相当于除以 2(并向下取整),结果为 30(0001 1110)
console.log(h); // 输出 30

// 无符号右移(>>>)
let i: number = a >>> 2; // 将 a 的所有位向右移动 2 位,但左侧填充 0 而不是符号位,对于正数等同于 >>
console.log(i); // 输出 15(0000 1111),对于负数,符号位会被丢弃,然后填充 0

请注意,位运算符只能用于整数类型(在 TypeScript 和 JavaScript 中通常是 number 类型,但实际上是按照 32 位或 64 位整数来处理的,具体取决于实现)。

此外,由于位运算符在二进制层面操作,因此结果可能会受到 JavaScript 数字表示的限制(通常是 IEEE 754 双精度浮点数,但在位操作中会被当作 32 位有符号整数处理)。对于非常大的数字或负数,结果可能不符合直观的数学期望。

对于无符号右移运算符 >>>,它总是用 0 来填充左侧空位,不考虑原始数字的符号。这在处理无符号整数或需要保持正数结果时特别有用。

取反~(单独解释)

下面将详细解释位非运算符 ~ 的每一步过程。

示例:对数字 5 进行位非操作

1. 将操作数转换为二进制表示

首先,我们需要将十进制数 5 转换为 32 位的二进制表示。

十进制数 5 的二进制表示是:

00000000 00000000 00000000 00000101
2. 对二进制表示的每一位进行取反操作

接下来,我们对每一位进行取反操作,即将 0 变为 1,1 变为 0。

00000000 00000000 00000000 00000101  (原始二进制)
11111111 11111111 11111111 11111010  (取反后的二进制)
3. 将取反后的二进制表示转换回十进制数

取反后的二进制数 11111111 11111111 11111111 11111010 是一个 32 位的有符号整数。为了将其转换回十进制数,我们需要理解二进制补码表示法。

在二进制补码表示法中:

  • 最高位(最左边的一位)是符号位:0 表示正数,1 表示负数。
  • 负数的补码表示是其绝对值的二进制表示按位取反后加 1。

首先,我们确认这个二进制数是负数,因为最高位是 1。

要将其转换回十进制数,我们需要进行以下步骤:

  1. 取反:将 11111111 11111111 11111111 11111010 按位取反,得到 00000000 00000000 00000000 00000101
  2. 加 1:在取反结果的基础上加 1,得到 00000000 00000000 00000000 00000110

这个二进制数 00000000 00000000 00000000 00000110 的十进制表示是 6。

由于我们最初的二进制数是负数,所以最终结果是 -6。

结论

通过上述步骤,我们可以得出:

~5 = -6

数学公式

实际上,位非运算符 ~ 的结果可以用以下公式表示:

~n = -(n + 1)

应用这个公式:

~5 = -(5 + 1) = -6

代码示例

const a = 5;
const b = ~a;

console.log(b); // 输出 -6

小结

  • 步骤 1:将十进制数转换为 32 位二进制表示。
  • 步骤 2:对二进制表示的每一位进行取反操作。
  • 步骤 3:将取反后的二进制表示转换回十进制数。

位非运算符 ~ 将一个数的每一位取反,并返回结果。在 TypeScript 中,这个操作的结果实际上是 -(n + 1)。

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值