bit-manipulation相关内容
我有一个类型为Long Long的整数,在删除该整数的二进制表示形式中存在的尾随零后,我要将其转换为新的整数。 推荐答案 以下是一种暴力方法: long long remove_trailing_zeroes(long long v) { if (v != 0) { while ((v & 1) == 0) v /= 2;
..
我们知道,要计算整数x/2,我们只需为x*2编写类似的y=x/2;;但优秀的程序员使用位操作来计算这一点。 他们只是y = x >> 1; 这两种方法有什么区别吗? 我所说的差异是指所需时间/空间/内存的差异,或者两者完全相同(即x/2由x>>1实现)? 与其他数字而不是2的乘除也是以相同的方式实现的(即5*5 = 10*2 + 5*1 = 10
..
我在执行一些位操作的C程序时遇到了一些问题。在程序中,我使用一个无符号的long long int变量来表示一个64位地图,每一位代表地图上的一个位置。我需要能够更新这些位(位置),即设置或清除一个位。 为了清除和设置位,我这样做(0是最低有效位): map &= ~(1
..
我知道算术右移保留MSB,而逻辑右移不保留MSB。但是算术左移和逻辑左移有什么区别? 推荐答案 它们是相同的操作。两者都将位向左移位,并将‘0’添加到LSB。
..
如何才能将以下手动逻辑替换为http://programming.sirrida.de/perm_fn.html#bit_permute_step? unsigned int ConvertRGBAToBGRA(unsigned int v) { unsigned char r = (v)& 0xFF; unsigned char g = (v >> 8) & 0xFF;
..
在C#中,我有一个32位的值,我将其存储在一个int中。我需要查看是否设置了特定的位。我需要的位是0x00010000。 我想出了这个解决方案: 这是我要找的: Hex: 0 0 0 1 0 0 0 0 0 Binary 0000|0000|0000|0001|0000|0000|0000|0000|0000
..
找出表示某个随机整型数需要多少位,最有效的方法是什么? 例如,数字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) //
..
(对不起,我想出了一些有趣的主意...请原谅我...) 假设我有一个‘Double’值,包括: implicit sign exponent bit mantissa 0 10000001001 (1).0011010010101010000001000001100010010011011101001100 如果我是对的
..
我想知道是否可以使用位操作来根据位掩码合并两个位域? 例如,我有两个值和一个位掩码: char mask = 0x29; // 0010 1001 char a = 0x9; // 0000 1001 original value char b = 0xE8; // 1110 1000 modified value 我想根据位掩码将b中的位设置为a的值。只有3位会受到影响。
..
我有%3个字节。 一个字节决定第三个字节的哪些位需要更改(1表示位需要更改,0表示不应该更改)。 第二个字节确定更改的位是被分配1还是0。 第3个字节是发生更改的位置。 有没有办法可以使用按位运算符来实现这一点?如果是这样的话,是如何做到的呢?一个简单的公式或程序来实现这一点是很好的(最好是用c语言)。 示例: BitsToAssign: 0b01101011 Va
..
我有以下代码 int n = 50; while(n) { //1 if(n & 1) cout >= 1;
..
我看到了一些解决方案,但它看起来很复杂。 在n,m位置的两个位之间交换的最有效方法是什么? int swapBits(int num, int nPostion, int mPosition); 推荐答案 给定整数n,我们要在其中交换位置p1和p2的位: 算法:如果两位相同,则返回相同的值,否则使用异或切换两位。 unsigned int swapBits(unsign
..
以下是我所做的: 93 | 199 返回 223 我理解这是因为0b1011101 | 0b11000111是0b11011111 然而,假设我要执行相反的操作。如何从0b11000111和0b11011111之间的按位运算中获取0b1011101? 推荐答案 一般情况下无法得到明确的答案。如果C=A|B,则无论您在C中有1,在A中有1,B的对应位可能是0或1
..
测试此代码时 for (int i = 0; i
..
我正在将一个库从Java脚本转换为C#,我觉得在这种情况下: // Javascript var number = 3144134277.518717 | 0; console.log(number); // -> -1150833019 从我在其他帖子上看到的,它可能被用来对值进行四舍五入,但在这种情况下,值不是我期望的值(如果它是四舍五入的话),并且我不能在C#中用以下命令再现相同的
..
我之前问过converting uint to hex string。现在,我希望将十六进制值0x00ff08存储在bytes3变量中,并能够将其转换为稳健智能合约中的string。随后,我打算将其部署在RSK上,并至少使用0.8.0版的固态编译器。 我尝试了string(abi.encodePacked(bytes3(0x00ff08)))但它引发运行时错误 无法解码输出:NULL:
..
我需要将这种0xff0000或0x00ff08(十六进制颜色表示)的值存储在Solidity智能合同中,并能够将其转换为具有相同文本字符的字符串"ff0000"。我打算在RSK上部署此智能合同。 我的想法是将这些值存储在bytes3或简单的uint变量中,并使用一个纯函数将bytes3或uint转换为相应的字符串。我找到了一个函数,它可以处理0.4.9的固结度 pragma solid
..
解决方案手册中的答案对于这个位域提取问题似乎是错误的。我的问题发布在下面。 以下是设置: 提出的问题是: 查找最短的MIPS指令序列,以提取 常量值i=22和j=5的$t0中的字段,并将该字段放入$t1 采用数据表中显示的格式。 解决方案手册给出了以下答案: lui $t1, 0x003f ori $t1, $t0, 0xffe0 and $t1, $t0, $t1 sr
..
首先,(-1 >>> 0) === (2**32 - 1),我估计是因为左边加了一个新的零,从而将数字转换成33位数字? 但是,为什么(-1 >>> 32) === (2**32 - 1)也是,而我预计它(将32位数字移位32次并将最高有效位替换为0之后)为0。 它不应该等于((-1 >>> 31) >>> 1) === 0吗?还是我错过了什么? 推荐答案 执行(-1 >>
..
我正在尝试在汇编中编写一个函数,该函数将检测较长的二进制数是否包含较小的二进制模式。 示例: 100111是否包含1001? 当我读到这个问题时,我想我应该对大数字和它的较小模式进行逐位AND运算,同时每次在循环中向右(逻辑)移位。 因此,在我的脑海中,我认为它可以: 100111 AND 1001 = 0 Shift-right 1 010011 AND 100
..