bit-manipulation相关内容

查找位数组中设置的最高有效位(最左侧)

我有一个位数组实现,其中第 0 个索引是数组中第一个字节的 MSB,第 8 个索引是第二个字节的 MSB,等等...... 找到在这个位数组中设置的第一位的快速方法是什么?我查找的所有相关解决方案都找到了第一个最不重要的位,但我需要第一个最重要的位.所以,给定 0x00A1,我想要 8(因为它是左起第 9 位). 解决方案 GCC 有 __builtin_clz 在 x86/x64 ..
发布时间:2021-11-24 22:47:22 C#

两个数组,其中数组 x 中的项可以在数组 y 中,反之亦然,测试所有排列

我编写的一个小应用程序允许用户将各种项目添加到两个数组中.一些逻辑根据每个数组的内容计算一个数字. 数组 x 中的任何项目都可以放入数组 y 中,然后再返回.永远不能移动属于数组 y 的项目(除非它们从数组 x 中移动). 用户可以使用简单的 javascript ui 在两个列表中移动这些项目.为了让事情更简单,我最初制作了一个简单的脚本: 将项目从 a 移到 y. 使用这种 ..
发布时间:2021-11-18 02:34:05 前端开发

如何在 C 中定义和使用位数组?

我想创建一个非常大的数组,在上面写上“0"和“1".我试图模拟一个称为随机顺序吸附的物理过程,其中长度为 2 的单位,二聚体,在随机位置沉积到 n 维晶格上,彼此不重叠.当晶格上没有更多空间用于沉积更多二聚体(晶格被堵塞)时,该过程停止. 最初我从零点阵开始,二聚体由一对“1"表示.随着每个二聚体的沉积,二聚体左侧的位点被封闭,因为二聚体不能重叠.所以我通过在晶格上放置三重“1"来模拟这个过 ..

ARM位域提取?

有人能解释一下这条指令的作用并将其翻译成 C 吗? ubfx.w r3, r11, #0xE, #1 根据 ARM 参考手册,它执行了“有符号和无符号位域提取",但我不擅长所有这些按位的东西. 解决方案 UBFX 只是从源寄存器中提取一个位域并将其放入目标寄存器的最低有效位中. 一般形式为: UBFX dest、src、lsb、宽度 在 C 中将是: dest = (src ..
发布时间:2021-11-17 21:53:17 其他开发

使用按位运算将 Int 转换为 Float 或 Float 为 Int(软件浮点)

我想知道您是否可以帮助解释将整数转换为浮点数或将浮点数转换为整数的过程.对于我的班级,我们将仅使用按位运算符来执行此操作,但我认为对从类型到类型的转换的坚定理解将在此阶段对我有更多帮助. 据我目前所知,要使 int 浮点数,您必须将整数转换为二进制数,通过找到有效数、指数和分数来标准化整数的值,然后从那里输出浮点数中的值? 对于float转int,你需要将值分成有效数、指数和分数,然后 ..
发布时间:2021-11-17 21:38:28 其他开发

未解析基本语法的解决方法

我想要一个类属性,允许在等号右侧进行表达式.所有版本的 PHP 都依赖于以下代码,但它是这样编写的,以便将来更容易扩展. /* 示例 SDK 类 */类SDK{/* 运行时选项标志 *///字符串# 0:不对字符串进行更改.var $STRING_NONE = (1 ..
发布时间:2021-11-17 04:56:03 PHP

Arduino 中不需要的符号扩展

我正在尝试在 Arduino 中实现逻辑右移(即避免符号扩展),并在阅读 Arduino BitShift 指南后(https://www.arduino.cc/en/Reference/Bitshift),它表明将无符号变量向右移动,不会导致符号扩展: 当你将 x 右移 y 位 (x >> y) 时,x 中的最高位是a 1,行为取决于 x 的确切数据类型.如果 x 是类型int,最高位为符 ..
发布时间:2021-11-17 03:59:47 C/C++开发

哪里可以了解“位"?

我试图找到一些详细讨论位的书籍或资源,例如,我可以将一个数字(如 16)转换为位.我目前是一名高中生,每当阅读编程书籍时,除了位/位运算符部分之外,我几乎可以理解所有内容.我只是不知道它是如何工作的,以及为什么人们甚至发明了 bit &byte :(.因此,我希望你们能给我一些关于如何将数字/字符转换为位的资源建议. 解决方案 尝试使用谷歌搜索“二进制算术".这是一篇非常好的文章,可以帮助 ..
发布时间:2021-11-17 03:00:08 C/C++开发

找到打开所有灯泡的最少开关数量

我试图理解给定的问题 这里 及其解决方案: 问题说明: N 个灯泡由一根电线连接.每个灯泡都有一个与之关联的开关,但是由于接线错误,开关也会改变当前灯泡右侧的所有灯泡的状态.给定所有灯泡的初始状态,找出您必须按下才能打开所有灯泡的最少开关数量.您可以多次按下同一个开关. 注意:0代表灯泡关闭,1代表灯泡开启. 示例:输入:[0 1 0 1]返回 : 4解释 :按下开关 0 : ..
发布时间:2021-10-26 18:43:39 Java开发

查询的最小异或

我在一次采访中被问到以下问题. 给定一个包含 N 个元素的数组 A 和一个包含 M 个元素的数组 B.对于每个 B[X] 返回 A[I],其中 A[I] 和 B[X] 的 XOR 最小. 例如: 输入 A = [3, 2, 9, 6, 1]B = [4, 8, 5, 9] 输出 [6, 9, 6, 9] 因为当A[I] = 6时,4与A中的任何元素异或都会出现最小值 4 ..
发布时间:2021-10-02 19:06:50 Python

在大数组中有效地找到最低有效设置位?

我有一个巨大的内存块(位向量),在一个内存页面内有 N 位大小,考虑 N 平均为 5000,即 5k 位来存储一些标志信息. 在某个时间点(超频繁 - 关键),我需要在整个大位向量中找到第一个位集.现在我按 64 个字执行,即在 __builtin_ctzll 的帮助下).但是当 N 增长而搜索算法无法改进时,可以通过扩展内存访问宽度来扩展此搜索.这是几句话的主要问题 有一个名为 BSF ..
发布时间:2021-09-29 19:44:35 其他开发

"1 << 和有什么区别?x"和“pow(2, x)"?

因此,在使用 Unity 时,我不得不使用按位运算符.现在,不要误会我的意思,我完全意识到按位运算符的用处,并且在某些情况下,它不能被替换而不必编写一堆丑陋的代码.问题更像是... a和b有什么区别,在这里: double a = 1 根据我对函数和二进制的理解,在这两种情况下,您最终都会在第四个位置得到 1,这等于 8...是什么阻止了任何人在按位运算符上使用 Math.pow?它真的会改 ..
发布时间:2021-09-14 19:28:39 C#/.NET

便携式和紧密的位包装

假设我有三个 unsigned int、{a、b、c、d},我想分别用非标准长度 {9,5,7,11} 打包.我希望制作一个网络数据包(unsigned char pkt[4]),我可以将这些值打包到其中,并在另一台机器上使用相同的头文件可靠地解包,而不管字节序如何. 我读到的关于使用打包结构的所有内容都表明位排序是不可预测的,所以这是不可能的.所以这给我留下了位设置和位清除操作,但我对如何 ..
发布时间:2021-06-07 19:51:05 其他开发

无符号右移/零填充右移/& gt;& gt;在PHP中(等效于Java/JavaScript)

在将其标记为重复项之前,请阅读以下内容,并检查 我的代码 * 我的更新代码! 所以我的问题是,我必须实现Java/JavaScript'>>>'(无符号右移/零填充右移),但是我无法以完全相同的方式工作. 我选择了我在SO和Web上找到的11个最有希望的实现(链接在代码中作为注释添加)并添加了一些测试用例.不幸的是,这些功能的 NONE 对所有测试都返回了与Java/JS相同的响应.( ..
发布时间:2021-05-19 18:55:03 Java开发

AVX512-如何将所有设置的位右移?

如何将屏蔽寄存器的所有设置位向右移动?(到最下面的最低位置). 例如: __ mmask16 mask = _mm512_cmpeq_epi32_mask(vload,vlimit);//掩码= 1101110111011101 如果将所有设置的位右移,则会得到: 1101110111011101->0000111111111111 如何有效地做到这一点? 下面您可以看到 ..
发布时间:2021-05-16 19:51:45 其他开发

如何取消设置N个最右边的设置位

有一个相对知名的技巧可以取消设置一个最右边的位: y = x&(x-1)//0b001011100&0b001011011 = 0b001011000 :) 我发现自己有一个死循环来清除n个最右边的位,但是有没有更简单的代数技巧? 假定相对较大的n(对于64位整数,n必须小于64,但通常约为20-30). //x = 0b001011100 n = 2对于(auto i = 0; ..
发布时间:2021-05-16 19:51:31 其他开发