bit-manipulation相关内容

X/2和x>;>;1或x*2和x<;<;1的差异,其中x是整数

我们知道,要计算整数x/2,我们只需为x*2编写类似的y=x/2;;但优秀的程序员使用位操作来计算这一点。 他们只是y = x >> 1; 这两种方法有什么区别吗? 我所说的差异是指所需时间/空间/内存的差异,或者两者完全相同(即x/2由x>>1实现)? 与其他数字而不是2的乘除也是以相同的方式实现的(即5*5 = 10*2 + 5*1 = 10 ..
发布时间:2022-09-23 10:11:45 C/C++开发

设置和清除C中的位

我在执行一些位操作的C程序时遇到了一些问题。在程序中,我使用一个无符号的long long int变量来表示一个64位地图,每一位代表地图上的一个位置。我需要能够更新这些位(位置),即设置或清除一个位。 为了清除和设置位,我这样做(0是最低有效位): map &= ~(1 ..
发布时间:2022-08-20 10:07:56 其他开发

如何在C#中检查是否设置了特定的位

在C#中,我有一个32位的值,我将其存储在一个int中。我需要查看是否设置了特定的位。我需要的位是0x00010000。 我想出了这个解决方案: 这是我要找的: Hex: 0 0 0 1 0 0 0 0 0 Binary 0000|0000|0000|0001|0000|0000|0000|0000|0000 ..
发布时间:2022-08-20 09:33:59 C#/.NET

表示数字的最小位数

找出表示某个随机整型数需要多少位,最有效的方法是什么? 例如,数字30,000用 表示为二进制 111010100110000 所以它需要15位 推荐答案 int v = 30000; // 32-bit word to find the log base 2 of int r = 0; // r will be lg(v) while ( (v >>= 1) != 0) // ..
发布时间:2022-08-20 09:15:58 C#/.NET

根据位掩码合并两个位域

我想知道是否可以使用位操作来根据位掩码合并两个位域? 例如,我有两个值和一个位掩码: char mask = 0x29; // 0010 1001 char a = 0x9; // 0000 1001 original value char b = 0xE8; // 1110 1000 modified value 我想根据位掩码将b中的位设置为a的值。只有3位会受到影响。 ..
发布时间:2022-06-28 16:43:49 其他开发

如何使用按位运算来根据其他两个字节分配一个字节的特定比特?(根据蒙版进行比特混合)

我有%3个字节。 一个字节决定第三个字节的哪些位需要更改(1表示位需要更改,0表示不应该更改)。 第二个字节确定更改的位是被分配1还是0。 第3个字节是发生更改的位置。 有没有办法可以使用按位运算符来实现这一点?如果是这样的话,是如何做到的呢?一个简单的公式或程序来实现这一点是很好的(最好是用c语言)。 示例: BitsToAssign: 0b01101011 Va ..
发布时间:2022-06-28 16:36:18 其他开发

交换给定整数中的两个位

我看到了一些解决方案,但它看起来很复杂。 在n,m位置的两个位之间交换的最有效方法是什么? int swapBits(int num, int nPostion, int mPosition); 推荐答案 给定整数n,我们要在其中交换位置p1和p2的位: 算法:如果两位相同,则返回相同的值,否则使用异或切换两位。 unsigned int swapBits(unsign ..
发布时间:2022-06-10 15:49:20 其他开发

如何反转按位或运算?

以下是我所做的: 93 | 199 返回 223 我理解这是因为0b1011101 | 0b11000111是0b11011111 然而,假设我要执行相反的操作。如何从0b11000111和0b11011111之间的按位运算中获取0b1011101? 推荐答案 一般情况下无法得到明确的答案。如果C=A|B,则无论您在C中有1,在A中有1,B的对应位可能是0或1 ..
发布时间:2022-06-10 15:38:17 Python

如何在C#中从Java代码中实现十进制位运算

我正在将一个库从Java脚本转换为C#,我觉得在这种情况下: // Javascript var number = 3144134277.518717 | 0; console.log(number); // -> -1150833019 从我在其他帖子上看到的,它可能被用来对值进行四舍五入,但在这种情况下,值不是我期望的值(如果它是四舍五入的话),并且我不能在C#中用以下命令再现相同的 ..
发布时间:2022-06-10 14:43:06 C#/.NET

如何将bytes3转换为实心的十六进制字符串

我之前问过converting uint to hex string。现在,我希望将十六进制值0x00ff08存储在bytes3变量中,并能够将其转换为稳健智能合约中的string。随后,我打算将其部署在RSK上,并至少使用0.8.0版的固态编译器。 我尝试了string(abi.encodePacked(bytes3(0x00ff08)))但它引发运行时错误 无法解码输出:NULL: ..
发布时间:2022-04-10 11:24:13 其他开发

实度将十六进制数字转换为十六进制字符串

我需要将这种0xff0000或0x00ff08(十六进制颜色表示)的值存储在Solidity智能合同中,并能够将其转换为具有相同文本字符的字符串"ff0000"。我打算在RSK上部署此智能合同。 我的想法是将这些值存储在bytes3或简单的uint变量中,并使用一个纯函数将bytes3或uint转换为相应的字符串。我找到了一个函数,它可以处理0.4.9的固结度 pragma solid ..
发布时间:2022-04-10 10:58:03 其他开发

从寄存器中提取字段的MIPS指令

解决方案手册中的答案对于这个位域提取问题似乎是错误的。我的问题发布在下面。 以下是设置: 提出的问题是: 查找最短的MIPS指令序列,以提取 常量值i=22和j=5的$t0中的字段,并将该字段放入$t1 采用数据表中显示的格式。 解决方案手册给出了以下答案: lui $t1, 0x003f ori $t1, $t0, 0xffe0 and $t1, $t0, $t1 sr ..
发布时间:2022-03-27 22:09:38 其他开发

JavaScript使用填零运算符(>;>;>;)进行右移会产生意外结果

首先,(-1 >>> 0) === (2**32 - 1),我估计是因为左边加了一个新的零,从而将数字转换成33位数字? 但是,为什么(-1 >>> 32) === (2**32 - 1)也是,而我预计它(将32位数字移位32次并将最高有效位替换为0之后)为0。 它不应该等于((-1 >>> 31) >>> 1) === 0吗?还是我错过了什么? 推荐答案 执行(-1 >> ..
发布时间:2022-03-01 18:04:29 前端开发

使用右移和按位AND?查找二进制数模式。

我正在尝试在汇编中编写一个函数,该函数将检测较长的二进制数是否包含较小的二进制模式。 示例: 100111是否包含1001? 当我读到这个问题时,我想我应该对大数字和它的较小模式进行逐位AND运算,同时每次在循环中向右(逻辑)移位。 因此,在我的脑海中,我认为它可以: 100111 AND 1001 = 0 Shift-right 1 010011 AND 100 ..
发布时间:2022-03-01 18:01:59 其他开发