bit-manipulation相关内容

将零、负和正映射到 0、1、2 的无分支代码

编写一个无分支函数,如果两个有符号整数之间的差为零、负数或正数,则返回 0、1 或 2. 这是一个带有分支的版本: int 比较(int x, int y){int diff = x - y;如果(差异== 0)返回0;否则如果(差异 这是一个可能更快的版本,具体取决于编译器和处理器: int 比较(int x, int y){int diff = x - y;返回差异== 0?0 : ..
发布时间:2021-12-20 16:08:54 C/C++开发

四舍五入到下一个 2 的幂

我想编写一个函数,返回最接近的 2 的下一个幂.例如,如果我的输入是 789,那么输出应该是 1024.有没有什么方法可以在不使用任何循环而只使用一些按位运算符的情况下实现这一点? 解决方案 检查位玩弄黑客.您需要获得以 2 为底的对数,然后将其加 1.32 位值的示例: 四舍五入到 2 的下一个最高幂 unsigned int v;//计算 32 位 v 的 2 的下一个最高幂v ..
发布时间:2021-12-20 15:41:18 其他开发

XSLT 按位逻辑

我有一个现有的数据集,它利用一个整数来存储多个值;遗留前端做了一个简单的按位检查(例如在 C# 中:iValues & 16 == 16)以查看是否设置了特定值.是否可以在 XSL 中进行按位运算,更明确地说,是否可以通过屏蔽进行位级比较?内置的“and"总是会导致“true"或“false",但也许可以通过可用的数学运算符来实现? 我目前使用的是 .NET 2.0,它使用 XSLT 1.0 ..
发布时间:2021-12-19 21:18:10 其他开发

在 C 中使用位字段时的字段顺序

我有一个以下类型的结构 typedef 结构体{无符号整数 a : 8;无符号整数 b : 6;无符号整数 c : 2;}x, *ptr; 我想做的是更改字段 c 的值. 我做了类似下面的事情 x 结构 = { 0 };x->c=1; 当我查看内存映射时,我希望找到 00 01,但我却找到了 00 40.看起来在排列第二个字节时,它把c字段放在最低位,b字段放在最高位.我在 GCC ..
发布时间:2021-12-18 23:09:52 其他开发

Bitshift 和整数提升?

通常,C 要求二元运算符的操作数提升为更高级别操作数的类型.这可以用来避免使用冗长的强制转换填充代码,例如: if (x-48U 等 但是,我发现,至少对于 gcc,这种行为不适用于位移位.即 int x = 1;unsigned long long y = x 我希望右手操作数的类型导致左手操作数被提升为 unsigned long long 以便转换成功.但相反,gcc 会打印 ..
发布时间:2021-12-18 22:58:36 其他开发

x86 XOR 操作码差异

查看 http://ref.x86asm.net/coder32.html 我发现了两个与语句匹配的操作码 异或 eax,eax 1) 操作码 31 XOR r/m16/32 r16/32 2) 操作码 33 XOR r16/32 r/m16/32 都指的是操作数 1 和操作数 2 的 32 位寄存器.那么,对两个 32 位寄存器进行异或的这种特定情况有什么不同吗? ..

快速可除性测试(按 2,3,4,5,.., 16)?

最快的可分性测试是什么?比如说,给定一个小端架构和一个 32 位有符号整数:如何非常快速地计算出一个数可以被 2、3、4、5、...整除 16? 警告:给定的代码只是示例.每条线都是独立的!在许多没有 DIV 硬件(如许多 ARM)的处理器上,使用模运算的明显解决方案很慢.一些编译器也无法进行这样的优化(例如,如果除数是函数的参数或依赖于某些东西). Divisible_by_1 = do ..
发布时间:2021-12-17 15:27:58 C/C++开发

生成汉明距离 t 内的所有位序列

给定一个比特向量v,计算具有v的汉明距离为1的比特集合,then,距离为2,向上到输入参数 t. 所以 011 我应该得到~~~111001010~~~ ->3 选1101000110~~~ ->3选2100~~~ ->3 选择 3 如何有效地计算这个?向量不会总是 3 维,例如它可能是 6.这将在我的实际代码中运行很多次,因此也欢迎提高效率(即使支付更多内存). 我的尝试: # ..

'and'(布尔值)与 '&'(按位)- 为什么列表与 numpy 数组的行为不同?

列表与 NumPy 数组的布尔运算和按位运算的行为有何不同? 我对 & 与 and 在 Python 中的正确使用感到困惑,如下例所示. mylist1 = [真、真、真、假、真]mylist2 = [假,真,假,真,假]>>>len(mylist1) == len(mylist2)真的# ---- 示例 1 ---->>>mylist1 和 mylist2[假,真,假,真,假]# 我会期 ..
发布时间:2021-12-08 08:56:52 Python

PHP 函数标志,如何?

我正在尝试创建一个以标志为参数的函数,但输出总是与预期不同: define("FLAG_A", 1);定义(“标志B",4);定义(“FLAG_C",7);功能 test_flags($flags) {if($flags & FLAG_A) echo "A";if($flags & FLAG_B) echo "B";if($flags & FLAG_C) echo "C";}测试标志(FLAG_ ..
发布时间:2021-12-07 23:45:41 PHP

在大集合中有效地找到具有低汉明距离的二进制字符串

问题: 给定一个大型(约 1 亿)无符号 32 位整数列表、一个无符号 32 位整数输入值和一个最大值 汉明距离,返回输入值指定汉明距离内的所有列表成员. 保存列表的实际数据结构是开放的,性能要求决定了内存中的解决方案,构建数据结构的成本是次要的,查询数据结构的低成本至关重要. 示例: 最大汉明距离为 1(值通常会非常小)并输入:000010001000000000000000 ..

解释一下这个片段,它在不使用 if-else 或任何其他比较运算符的情况下找到两个整数的最大值?

求两个数中的最大值.您不应使用 if-else 或任何其他比较运算符.我在在线公告板上发现了这个问题,所以我想我应该在 StackOverflow 中提问 示例输入:5、10输出:10 我找到了这个解决方案,谁能帮我理解这几行代码 int getMax(int a, int b) {int c = a - b;int k = (c > > 31) &0x1;int max = a - ..
发布时间:2021-12-06 19:57:03 其他开发

不使用'/'的除法

谁能告诉我一种不使用“/"来执行除法运算的有效方法.我可以使用类似于二进制搜索的方法在 log(n) 步骤中计算整数值. 115/357 * 3 >11528 * 3 但是还有其他更有效的方法吗? 解决方案 典型的做法是移位和减法.这基本上与我们在学校学到的长除法非常相似.最大的区别在于,在十进制除法中,您需要估计结果的下一位.在二进制中,这是微不足道的.下一个数字始终是 0 或 1 ..
发布时间:2021-12-06 19:52:32 其他开发

在一个位置或更低位置计算设置位的有效方法是什么?

给定 std::bitsetbits 具有任意数量的位设置和位位置 X (0-63) 在 X 位置或更低位置计数或在 X 位置未设置时返回 0 的最有效方法是什么 注意:如果设置了该位,则返回值始终至少为 1 蛮力方式很慢: int countupto(std::bitset bits, int X){如果 (!bits[X]) 返回 0;整数总计=1;for (int i=0 ..
发布时间:2021-12-06 19:33:33 C/C++开发

了解按位与运算符

我一直在 Kochan 的书“Objective-C 中的编程"中阅读有关 Objective-C 中的位运算符的内容. 我对这部分感到非常困惑,尽管到目前为止我已经真正理解了呈现给我的大多数其他内容. 这是书中引述: 按位与运算符 按位与常用于掩码操作.也就是说,这个运算符可以很容易地用于将数据项的特定位设置为 0.例如,语句 w3 = w1 &3; 将 w1 的值与 ..