TypeScript位运算

news2024/11/25 12:58:05

参考文献:
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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C:冒泡排序

1、冒泡排序介绍&#xff1a; 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较。 先用一个例子来帮助大家理解一下冒泡排序的算法是怎们进行的 有一排高矮不同的人站成一列&#xff0c;要按照从矮到高的顺序重新排队。 冒泡排序的方法就是&#xff0c;从第一个人…

【栈和队列】常见面试题

文章目录 1.[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)1.1 题目要求1.2 利用栈解决 2. [用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)2.1 题目要求2.2 用队列实现栈 3.[用栈实现队列](https://le…

cesium gltf模型

cesium 支持的三维模型格式包括GLTF和GLB&#xff08;二进制glTF文件&#xff09;。 本文通过使用Entity图元的modelGraphics对象来加载gltf模型&#xff0c;简单对gltf模型的加载进行了封装。通过设置模型的欧拉角&#xff0c;可以计算模型的朝向。 1 3D数学中模型旋转的方式…

数据定义和操作

一、数据定义语言和操作语言 1. 分析需求设计数据库表 根据“优乐网”系统需求&#xff1a; 此系统满足以下需求&#xff1a; 系统支持生成商品的入库和出库。入库之后的商品可以在平台显示 所有用户都可以浏览系统的商品信息&#xff0c;只有注册用户才能订购团购商品和服…

机械学习—零基础学习日志(python编程)

零基础为了学人工智能&#xff0c;正在艰苦的学习 昨天给高等数学的学习按下暂停键&#xff0c;现在开始学习python编程。 我学习的思路是直接去阿里云的AI学习课堂里面学习。 整体感觉&#xff0c;阿里云的AI课堂还是有一些乱&#xff0c;早期课程和新出内容没有更新和归档…

进阶学习------linux运维读写执行权限

进阶学习------linux运维读写执行权限 在UNIX和类UNIX操作系统中&#xff0c;文件权限是通过一组特定的数字来表示的&#xff0c;这些数字分为三组&#xff0c;分别对应于用户&#xff08;文件所有者&#xff09;、组和其他用户的权限。每组权限由三个二进制位表示&#xff0c;…

如何进行硬件调试?

硬件调试是硬件系统设计、开发和制造过程中不可或缺的一环&#xff0c;旨在对可能出现的问题进行分析和解决。以下是进行硬件调试的一般步骤和方法&#xff1a; 一、准备阶段 熟悉设计文档&#xff1a;在开始调试之前&#xff0c;需要详细阅读和理解硬件系统的设计文档、原理图…

【探索数据结构与算法】——深入了解双向链表(图文详解)

目录 一、双向链表的基本概念 ​​​ 二、双向链表的结构 三、双向链表的基本操作实现方法 1.双向链表的初始化 2.双向链表的头插 3.双向链表的尾插 6.查找节点 7.在指定位置之前插入节点 8.删除指定位置节点 9.打印链表数据 10.双向链表销毁 四、完整代码实现 …

html+css+js网页设计 星享咖啡6个页面(带js) ui还原度90%

htmlcssjs网页设计 星享咖啡6个页面&#xff08;带js&#xff09; ui还原度90% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等…

一个拳打Claude3.5 Artifacts 脚踢软件外包公司的国产AI神器

Claude3.5的Artifacts功能想必大家都有所耳闻吧。 不了解的小伙伴也没关系&#xff0c;看下面这个视频。 更详细的介绍可以看之前我写的文章 关于Claude3.5-Sonnet引以为傲的功能&#xff0c;在半年前就被某国产平台无情碾压的那档事&#xff01;_claude 3.5 sonnet 国内能用…

20240808在飞凌OK3588-C开发板上使用HDMI OUT接口的SONY索尼8530机芯的YUV模式录像

20240808在飞凌OK3588-C开发板上使用HDMI OUT接口的SONY索尼8530机芯的YUV模式录像 2024/8/8 15:26 v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video8 v4l2-ctl -V -d /dev/video8 根据规格书《FCB-CR8550_8530_TM_20190730.pdf》&#xff0c;很容易知道8…

【秋招突围】2024届校招-拼多多笔试题-第一套

🍭 大家好这里是 大厂笔试突围,一起备战秋招笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🌻 听说本周PDD的笔…

elasticSearch和ik分词插件安装和使用

elasticSearch 特点&#xff1a;分布式搜索和分析引擎&#xff0c;可以用http以json的方式进行数据索引。 由来&#xff1a;ES全称Elastic Stack&#xff08;ELK Stack&#xff09;&#xff0c;是由三个产品elasticSearch&#xff0c;logstack&#xff08;数据收集&#xff0…

【新手必备】5分钟学会Transformer算法的核心要点

Transformer 是近年来在自然语言处理&#xff08;NLP&#xff09;领域取得显著成果的一种深度学习模型&#xff0c;最初由 Vaswani et al. 在 2017 年提出。 与传统的序列模型&#xff08;如 RNN 和 LSTM&#xff09;相比&#xff0c;Transformer 的主要优势在于其能够更好地处…

零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页

简介&#xff1a; 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…

go之protobuf和grpc

一、Protobuf Protobuf是接口规范的描述语言&#xff0c;可以通过工具生成代码&#xff0c;将结构化数据序列化。 二、grpc gRPC 是 Google 公司基于 Protobuf 开发的跨语言的开源 RPC 框架。 三、使用教程 3.1 student.proto syntax "proto3"; import "go…

软件测试---接口测试

一、接口及接口测试概念 &#xff08;1&#xff09;接口的类型 &#xff08;2&#xff09;接口测试的概念 &#xff08;3&#xff09;接口测试的原理 &#xff08;4&#xff09;接口测试的特点 &#xff08;5&#xff09;接口测试的实现方式 二、HTTP协议 &#xff08;1&#…

【人工智能】AI时代程序员----是缔造AI程序员,还是AI缔造程序员?

是缔造AI程序员&#xff0c;还是AI缔造程序员&#xff1f; 前言 随着AIGC&#xff08;如ChatGPT、MidJourney、Claude等&#xff09;大语言模型的涌现&#xff0c;AI辅助编程工具日益普及&#xff0c;程序员的工作方式正在发生深刻变革。 ​ ChatGPT ​ Midjourney ​ Claude …

【免费测试】人脸身份证比对接口如何用Java对接?(一)

一、什么是人脸身份证比对&#xff1f; 人脸身份证比对又称人证比对&#xff0c;实人比对&#xff0c;人像比对&#xff0c;输入姓名、身份证号码和头像照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

Processing之函数

一.函数基础 函数是processing程序中最基本的结构。经常使用的函数有draw()、line()、size()等。计算机每次运行程序的一行。当一个函数运行时&#xff0c;计算机跳到函数定义的位置&#xff0c;运行到哪里的代码&#xff0c;然后在跳回它离开的位置。 1.1掷骰子 案例代码如图…