bit-manipulation 相关问题

个别位的操纵。使用的运算符可以包括按位AND,OR,XOR,NOT,左移和右移。

这个不包含任何循环的简单代码是否会在汇编中生成循环?

我正在使用这段代码来检查一个整数是否是 4 的幂: // C++版本 布尔 is_pow_4(无符号 a) { return (std::popcount(a) == 1) && (std::countr_zero(a) % 2 == 0); } // C

回答 1 投票 0

如何学习按位运算

面对这样的按位运算问题我没有任何线索: 生成掩码,指示 x 中最左边的 1。假设w=32。 例如,0xFF00 -> 0x8000 和 0x6600 -> 0x4000。 如果 x = 0,则返回 0....

回答 1 投票 0

在Python中反转位

我正在做一些计算,我想知道如何在Python中反转一个字节。 例如: 0b11111111 应翻转为 0b00000000。 我尝试过变成一根绳子并翻转它......

回答 3 投票 0

如何在C中从数字中提取特定位?

我需要提取C中短数据类型的特定部分(位数)。 例如,我有一个二进制 52504 为 11001101000 11000,我想要前 6 个(从 LSB --> MSB 即 011000 十进制 24)位...

回答 9 投票 0

如何取消一点设置,从而关闭A20线

我读了这个教程。在教程中,作者介绍了 A20 以及启用它的不同方法。当他写到“快速 A20 方法”时,他说这是通过 s...

回答 2 投票 0

在AVR Studio中使用汇编确认寄存器中的值是否是3的倍数

我想使用AVR Studio和汇编语言确定寄存器中的数字是否是3的倍数,但在AVR ATmega 8515上,所以没有div指令/语法 我已经尝试过几种方法,比如

回答 2 投票 0

按位 `index>>=1` 运算是否等于 `index/2` 并且忽略结果的余数?

所以,我看到以下行index >>= 1,我想知道它是什么意思。我做了一些研究,发现它是按位运算,但我必须在脑海中模拟一些场景......

回答 1 投票 0

执行位操作以交换相邻的半字节[关闭]

在C语言中,如何对int进行位操作以交换相邻的半字节? 给我的输入是 0xDEAD,预期输出是 0xEDDA。

回答 1 投票 0

Leetcode:201 给定表示范围 [left, right] 的 left 和 right 两个整数,返回该范围内所有数字的按位与,包括

为什么会失败,我们是否可以在相同的逻辑中添加任何其他内容以使其正确。 它在左=6右=7处失败 这是代码片段: 类解决方案{ 公共静态 int log2(int N)...

回答 1 投票 0

C 中的按位归约运算符

C 中是否有像 Verilog 中那样的一元按位归约运算符? 就像在 Verilog 中一样,我们有: $display("&4'b1001 = %b",(&4'b1001)); 以及函数 a 的输出...

回答 2 投票 0

如何找到最高有效位(MSB)

我想知道一个字节的第一位是什么值。 例如: 我有字节 m = (字节) 0x8C; 我怎么知道第一位是 1 还是 0 ? 有人可以帮我吗?

回答 7 投票 0


我想执行位操作,使 int input = 0xDEAD 变为 0xEDDA。我如何用 C 语言做到这一点?

我的输入是int,预期输出必须是int,我可以看到我们正在交换相邻位。

回答 1 投票 0

使用按位运算符对不同模块的用户角色权限

所以我有一个具有多个模块的应用程序(将模块视为不同的页面),每个模块都有一组权限;查看、添加、编辑、删除 我希望每个用户角色都拥有以下权限...

回答 3 投票 0

C ASCII 到 Hex (atoh) 函数

我希望开发一个函数,将一系列 ASCII 字符(以其各自的十六进制表示形式)转换为单个十六进制值。例如,此函数的输入字符串可能是 {0...

回答 1 投票 0

有符号整数比较,无需比较运算符或加宽

我正在寻找一个有符号整数比较函数 cmp(x: Int, y: Int) -> Int ,它不使用任何比较运算符(<, <=, >、>=、<=>等),不使用扩大到 a

回答 1 投票 0

将跨越多个无符号长整型表示的两个二进制数相加的高效算法

我想在这个特定的框架中对两个二进制数求和,我将参考C++的编码语法。 64 个二进制数被编码为无符号 long long int 向量。 矢量 我想在这个特定的框架中对两个二进制数求和,我将参考C++的编码语法。 64 个二进制数被编码为无符号 long long int 向量。 vector<unsigned long long int> a; 其中 v[j] 的第 i 位等于第 i 个数的第 j 位,i = 0, ..., 64-1。 现在让我们考虑两个 64 位数字的集合 vector<unsigned long long int> a, b; 我想通过按位运算,将a中编码的64个数字与b中编码的64个数字一次性求和。例如,我想将a中编码的第0个数字与b中编码的第0个数字相加,将a中编码的第1个数字与b中编码的第1个数字相加,等等,然后写入结果变成一个 vector<unsigned long long int> c; 最快的方法是什么?我似乎记得必须使用二叉树结构,但我不确定。 添加一对转置整数(每个逻辑整数物理存储在位矩阵的列中)可以像这样完成: #include <cstdint> #include <vector> #include <cstddef> using std::uint64_t; using std::size_t; std::vector<uint64_t> add_transposed_integers( const std::vector<uint64_t> &a, const std::vector<uint64_t> &b) { size_t n = a.size(); std::vector<uint64_t> c(n); uint64_t carry = 0; for (size_t i = 0; i < n; i++) { uint64_t sum = (a[i] ^ b[i]) ^ carry; carry = (a[i] & b[i]) | (carry & (a[i] ^ b[i])); c[i] = sum; } return c; } 这里的按位逻辑只是纹波进位加法。 我假设 a、b 和 c 都应该具有相同的位数(这意味着:它们的向量都具有相同的长度)。如果不是这样,您可以轻松地进行一些修改。 我并不认为这是最快的方法,但让它更快并不容易。例如,您可能会考虑 SIMD,但进位传播确实很奇怪,您需要一些更高级的加法算法,例如 Kogge-Stone,它可以支持一些并行性,但总共会花费更多的操作。

回答 1 投票 0

如何根据计数翻转数字的位

所以在下面的Python脚本A中,根据geeksforgeeks.org,这个脚本是告诉我要翻转的位数以将a转换为b,所以在我复制计数结果后,我尝试创建自己的

回答 1 投票 0

将 32 位大端有符号整数转换为有符号小端整数

我有一些需要转换的无符号 32 位大端整数,一旦找到正确的标头,这就变得非常简单: #包括 ... be32toh(some_int); 然而,恩迪亚...

回答 2 投票 0

在python中获取二进制掩码

在 python 中获取 int 的最简单/最快的方法是什么,它可以用二进制的所有 1 表示。这是为了生成 N 位掩码。 例如: 如果总位数为 4,则二进制“1111”或...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.