Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
LeetCode 冥想——章节位操作_创想鸟

LeetCode 冥想——章节位操作

目录

简介按位运算符和 (&)或 (|)异或 (^)不是(~)左移(零填充)(右移(符号保留)(>>)右移(无符号)(>>>)有点设置一点资源

我们已经进入了本系列的最后一章,终于是时候简要介绍一下位操作了。

根据维基百科的定义,按位运算在位串、位数组或二进制数字(被视为位串)的各个位级别上进行运算。

我们首先用二进制(基数 2)表示一个数字。我们可以对数字使用 tostring 方法,并指定 基数:

const n = 17;console.log(n.tostring(2)); // 10001

我们还可以解析一个整数,给它一个基数:

console.log(parseint(10001, 2)); // 17

请注意,我们还可以表示带有前缀 0b 的二进制数:

console.log(0b10001); // 17console.log(0b101); // 5

例如,这些是相同的数字:

0b1 === 0b00000001 // true

javascript 中所有按位运算都是对 32 位二进制数执行的。
也就是说,在执行按位运算之前,javascript 将数字转换为 32 位 **有符号* 整数。*

例如,17 不会只是 10001,而是 00000000 00000000 00000000 00010001。

执行按位运算后,结果将转换回 64 位 javascript 数字。

按位运算符

和 (&)

如果两位都是 1,则结果为 1,否则为 0。

note

the gifs below show the numbers as 8-bit strings, but when doing bitwise operations, remember they are converted to 32-bit numbers.

LeetCode 冥想——章节位操作

const x1 = 0b10001;const x2 = 0b101;const result = x1 & x2; // 1 (0b1)

或 (|)

如果任意一位为 1,则结果为 1,否则为 0。

LeetCode 冥想——章节位操作

const x1 = 0b10001;const x2 = 0b101;const result = x1 | x2; // 21 (0b10101)

异或 (^)

如果各位不同(一位为1,一位为0),则结果为1,否则为0。

LeetCode 冥想——章节位操作

const x1 = 0b10001;const x2 = 0b101;const result = x1 ^ x2; // 20 (0b10100)

不是(~)

翻转位(1 变为 0,0 变为 1)。

LeetCode 冥想——章节位操作

const n = 17;const result = ~n; // -18
note

bitwise noting any 32-bit integer x yields -(x 1).

如果我们使用辅助函数来查看二进制表示,它正如我们所期望的:

console.log(createbinarystring(n));// -> 00000000 00000000 00000000 00010001console.log(createbinarystring(result));// -> 11111111 11111111 11111111 11101110

最左边的位表示信号 – 数字是负数还是正数。

请记住,我们说过 javascript 使用 32 位带符号整数进行按位运算。
最左边的位为 1 表示负数,0 表示正数。
此外,运算符对操作数的二进制补码位表示进行运算。 对每一位应用运算符,并按位构造结果。

请注意,二进制补码允许我们获得带有反信号的数字。
一种方法是反转正数表示中数字的位并加 1:

function twoscomplement(n) {  return ~n + 0b1;}

左移(零填充)(

将给定数量的位数向左移动,添加从右侧移入的零位。

const n = 17;const result = n < 00000000 00000000 00000000 00010001console.log(createbinarystring(34));// -> 00000000 00000000 00000000 00100010

请注意,第 32 位(最左边的一位)被丢弃。

右移(符号保留)(>>)

将给定位数向右移动,在从左侧添加位时保留符号。

const n = 17;const result = n >> 1; // 8console.log(createbinarystring(17));// -> 00000000 00000000 00000000 00010001console.log(createbinarystring(8));// -> 00000000 00000000 00000000 00001000
const n = -17;const result = n >> 1; // -9console.log(createbinarystring(-17));// -> 11111111 11111111 11111111 11101111console.log(createbinarystring(-9));// -> 11111111 11111111 11111111 11110111

右移(无符号)(>>>)

将给定位数向右移动,从左侧添加位时添加 0,无论符号是什么。

const n = 17;const result = n >>> 1; // 8console.log(createbinarystring(17));// -> 00000000 00000000 00000000 00010001console.log(createbinarystring(8));// -> 00000000 00000000 00000000 00001000
const n = -17;const result = n >>> 1; // 2147483639console.log(createbinarystring(-17));// -> 11111111 11111111 11111111 11101111console.log(createbinarystring(2147483639));// -> 01111111 11111111 11111111 11110111

得到一点

要获取特定位,我们首先需要创建一个位掩码.
我们可以通过将 1 向左移动我们想要获取的位的索引来实现这一点。
结果是二进制数和位掩码的 和 。

但是,使用javascript,我们还可以通过索引进行无符号右移,将位放在第一位(这样我们就无法得到该位置的实际值,但它是否是1或 0):

function getbit(number, idx) {  const bitmask = 1 <>> idx;}

例如,我们尝试 13,二进制为 1101:

const binarynumber = 0b1101;console.log('bit at position 0:', getbit(binarynumber, 0));console.log('bit at position 1:', getbit(binarynumber, 1));console.log('bit at position 2:', getbit(binarynumber, 2));console.log('bit at position 3:', getbit(binarynumber, 3));/*output:bit at position 0: 1bit at position 1: 0bit at position 2: 1bit at position 3: 1*/

设置一点

如果我们想将一位变为 1(换句话说,“设置一点”),我们可以做类似的事情。

首先,我们可以通过将 1 向左移动我们想要设置为 1 的位的索引来再次创建位掩码。
结果是数字和位掩码的 或 :

function setbit(number, idx) {  const bitmask = 1 << idx;  return number | bitmask;    }

请记住,在我们的示例中,13 在二进制中是 1101,假设我们要在索引 1 处设置 0:

const binaryNumber = 0b1101;const newBinaryNumber = setBit(binaryNumber, 1);console.log(createBinaryString(newBinaryNumber));// -> 00000000 00000000 00000000 00001111console.log('Bit at position 1:', getBit(newBinaryNumber, 1));// -> Bit at position 1: 1

我们简要地了解了按位运算,以及获取/设置位。在最后一章中,我们将从 1 位数开始讨论五个问题。在那之前,祝您编码愉快。

资源

“javascript 位操作的绝对要点”- lucas f. costajs 位运算符号码(mdn)按位与 (mdn)按位非 (mdn)按位或 (mdn)按位异或 (mdn)左移(mdn)右移(mdn)无符号右移 (mdn)

以上就是LeetCode 冥想——章节位操作的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499510.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript 编译的工作原理
上一篇 2025年12月19日 21:50:35
使用 Nextjs Tailwind CSS、Prisma、Open AI 和 Clerk 构建的 AI 旅行规划应用程序
下一篇 2025年12月19日 21:50:56

相关推荐

  • VSCode报错怎么显示中文_VSCode错误信息本地化与中文显示教程

    安装中文语言包可将VSCode界面和错误提示转为中文,提升使用便捷性;但外部工具如编译器、解释器生成的报错仍为英文,因VSCode仅显示其原始输出,无法翻译。 在VSCode中让报错信息显示中文,核心在于安装并启用官方的中文(简体)语言包。这不仅仅是针对错误信息,而是将整个VSCode的用户界面本地…

    2026年9月21日
    000
  • 蝴蝶号直播掉帧、断流怎么办?技术实用建议

    蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议

    解决蝴蝶号直播掉帧、断流问题需从硬件、软件、网络三方面入手。1. 硬件方面:检查cpu和gpu压力,必要时升级硬件或降低分辨率、帧率;确保摄像头、采集卡、内存正常工作。2. 软件方面:调整分辨率、帧率、码率至合适水平;使用h.265或硬件编码减轻cpu负担;设置关键帧间隔为2秒;关闭后台程序并检查平…

    2026年9月21日 • 用户投稿
    300
  • 如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

    如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

    PyTorch大模型训练需综合运用分布式训练、内存优化与高效计算策略。首先采用DistributedDataParallel实现多GPU并行,配合DistributedSampler确保数据均衡;通过混合精度训练、梯度累积和激活检查点缓解显存压力;使用torch.compile优化模型计算效率;选择…

    2026年9月21日 • 用户投稿
    100
  • 怎么全选VSCode多个光标_VSCode多光标操作与批量选择文本教程

    VSCode中高效创建多光标的方法包括:Alt+Click手动添加光标,适用于不规则位置;Ctrl+Alt+方向键垂直添加光标,适合连续多行操作;Ctrl+D逐个选择匹配项,精准控制选择范围;Ctrl+Shift+L一次性选择所有匹配项,实现全局批量修改。结合查找替换和列选择模式可进一步提升编辑效率…

    2026年9月21日
    100
  • mac怎么查看具体的内存型号_mac内存型号查询方法

    首先通过“关于本机”查看内存容量与类型,再进入“系统报告”的内存页面获取各插槽的制造商、型号、部件编号和速度等详细信息,最后使用“活动监视器”分析内存使用情况以判断是否需要升级。 如果您想了解Mac设备中安装的内存具体型号和规格,但系统概览仅显示总容量,则需要通过特定工具深入查看硬件信息。以下是查询…

    2026年9月21日
    000
  • VSCode的自动保存功能如何开启?

    在VSCode中开启自动保存需进入“文件”→“首选项”→“设置”,搜索auto save并选择Files: Auto Save模式,可选afterDelay、onFocusChange或onWindowChange,其中afterDelay可设置延迟时间如1000毫秒,启用后状态栏显示保存状态以确认…

    2026年9月21日
    000
  • 升级后如何检查兼容性

    检查兼容性是升级后确保系统稳定的关键,需先确认硬件配置与驱动支持,再验证软件运行及业务流程正常,最后通过系统日志排查潜在错误,逐步排除风险。 系统或软件升级后,检查兼容性是确保各项功能正常运行的关键步骤。直接进入实际使用前,花时间验证兼容性可以避免数据丢失、服务中断等问题。 检查硬件和驱动支持 某些…

    2026年9月21日
    100
  • PostgreSQL地理位置数据按距离排序的最佳实践:数据库层优化策略

    在处理大量地理位置数据并按距离排序时,将排序逻辑下推至数据库层(如postgresql)是更优的选择。这种方法能有效减少应用层的数据传输和内存消耗,充分利用数据库的计算能力,从而提升整体性能和资源利用率,而非在spring boot应用服务层进行排序。 1. 地理位置排序的需求与挑战 在现代Web应…

    2026年9月21日
    200
  • Chrome浏览器怎么开启数据同步功能_Chrome浏览器跨设备数据同步设置教程

    首先登录Google账户启用Chrome同步功能,确保书签、历史记录、密码等数据跨设备一致;接着在设置中自定义同步内容类型以满足隐私需求;然后通过Google账户密钥或自定义密码加密同步数据,提升安全性;最后在新设备登录同一账户,自动接收已同步的浏览数据,实现无缝体验。 如果您希望在不同设备间无缝使…

    2026年9月21日
    000
  • VSCode怎么运行全部代码_VSCode批量执行代码教程

    在VSCode里“运行全部代码”或“批量执行代码”,其实很少是一个单一的、所有语言通用的按钮。它更多的是指根据你项目的具体需求,通过配置任务(Tasks)、使用集成终端(Integrated Terminal)配合脚本,或者利用特定语言的运行/调试配置(Launch Configurations)来…

    2026年9月21日
    200
  • TuxPaint的AI工具怎么裁剪图片?教你轻松完成图片裁剪步骤

    TuxPaint的AI工具怎么裁剪图片?教你轻松完成图片裁剪步骤TuxPaint的AI工具怎么裁剪图片?教你轻松完成图片裁剪步骤TuxPaint的AI工具怎么裁剪图片?教你轻松完成图片裁剪步骤TuxPaint的AI工具怎么裁剪图片?教你轻松完成图片裁剪步骤

    TuxPaint没有AI裁剪工具,只能通过橡皮擦或填充工具手动模拟裁剪效果,适合儿童创意绘画但不适合精确图像编辑。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ TuxPaint作为一个面向儿童的绘画软件,其实并没有专门的“AI工具”来执行…

    2026年9月21日 • 用户投稿
    200
  • VSCode怎么新建ipynb文件_VSCode创建和编辑Jupyter笔记本文件教程

    答案:在VSCode中运行Jupyter笔记本需准备Python环境、安装Python扩展并确保安装ipykernel;通过命令面板或文件菜单新建笔记本,编辑时可添加代码或Markdown单元格,运行代码后结果实时显示;通过右上角内核选择器切换Python环境,推荐为不同项目配置独立虚拟环境以避免依…

    2026年9月21日
    200
  • 如何为VSCode设置自定义的代码高亮颜色?

    答案:通过settings.json中的editor.tokenColorCustomizations可自定义VSCode代码高亮颜色,支持全局或特定主题下修改关键字、字符串等元素颜色,结合textMateRules和作用域精确控制,提升代码可读性。 为 VSCode 设置自定义的代码高亮颜色,可以…

    2026年9月21日
    000
  • 为什么iPhoneSE2022屏幕无响应如何强制重启?快速按音量键后长按电源键

    首先尝试强制重启,若无效则检查充电状态,最后可通过恢复模式重装系统。具体为:1. 按音量+、音量-后长按电源键10秒以上;2. 充电15分钟观察是否响应;3. 连电脑进入恢复模式恢复系统。 如果您尝试唤醒或操作您的iPhone SE(2022款),但屏幕无响应或显示黑屏,可能是系统临时卡死或软件冲突…

    2026年9月21日
    100
  • mac怎么在菜单栏显示日期_Mac菜单栏显示日期方法

    首先启用菜单栏时钟显示,进入系统设置→控制中心→日期与时间→开启“在菜单栏中显示”;接着在“桌面与程序坞”→“时钟”中勾选“显示日期”以显示星期和具体日期,可选开启24小时制或秒数;若设置未生效,可通过终端执行killall SystemUIServer命令强制刷新菜单栏。 如果您发现Mac的菜单栏…

    2026年9月21日
    200
  • VSCode的括号匹配功能如何自定义?

    可通过 settings.json 自定义括号高亮的边框和背景色;2. 用 editor.matchBrackets 控制是否启用高亮;3. 启用 bracketPairColorization 可为嵌套括号着色;4. 使用 Ctrl/Cmd + Shift + 快速跳转配对括号。 VSCode 的…

    2026年9月21日
    100
  • VSCode的代码格式化快捷键是什么?

    VSCode代码格式化快捷键为Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS),需安装对应语言的格式化工具;若无效,可能是未安装扩展、文件类型不支持或快捷键冲突;可右键选择“格式化文档”或通过命令面板执行,也可在键盘快捷方式中自定义。 VSCode的代…

    2026年9月21日
    000
  • mac怎么用命令行定时关机_Mac命令行定时关机方法

    使用shutdown命令可设定Mac在指定时间或相对分钟后关机;2. 通过pmset命令能创建每周重复的定时关机任务;3. 可用pmset -g sched查看计划,sudo pmset repeat cancel取消重复任务,kill终止一次性关机。 如果您希望在离开电脑后让Mac在特定时间自动关…

    2026年9月21日
    100
  • MAC怎么查询硬件序列号_Mac查找本机序列号与保修信息

    首先可通过“关于本机”查看Mac序列号,依次点击苹果菜单→“关于本机”即可获取;也可通过“系统信息”或“终端”命令ioreg -l | grep IOPlatformSerialNumber查找;若无法操作设备,可登录Apple ID账户在线查询;最后访问苹果官网保修查询页面输入序列号,即可验证保修…

    2026年9月21日
    200
  • Safari浏览器下载中断怎么办 Safari浏览器下载失败问题修复方法

    先检查下载状态和权限设置,确认网站未被限制下载;通过无痕模式测试排除缓存或插件干扰;清理部分下载文件并更换网络环境;最后更新系统以确保兼容性。 遇到 Safari 下载中断或失败,别急着重启电脑。先确认下载是否真的卡住,有时只是速度慢。点按浏览器右下角的“显示所有下载”按钮(箭头方框图标),查看列表…

    2026年9月21日
    300

发表回复

登录后才能评论
关注微信