此代码如何计算数字的奇偶校验?
How does this code calculate the parity of a number?
所以我应该找到一个奇偶校验的数字的奇偶校验,如果在给定数字的二进制表示中存在奇数个集合位,甚至其他方式。我有一个解决方案,但代码不是很好理解,因此正在寻找它的解释。
int y = x ^ (x >> 1); //given number is x.
y = y ^ (y >> 2);
y = y ^ (y >> 4);
y = y ^ (y >> 8);
y = y ^ (y >> 16);
// Rightmost bit of y holds the parity value
// if (y&1) is 1 then parity is odd else even
if (y & 1)
return odd;
return even;
这很简单。这是合并位以获得奇偶校验位的方式:
Bit numbers:
0 1 2 3 4 5 6 7
/ / / /
01 23 45 56 x ^ (x >> 1)
/ /
/ /
0123 4567 y ^ (y >> 2);
/
/
/
/
01234567 y ^ (y >> 4);
简单地说,这棵树显示了如何有效地评估最年轻的位。 请注意,每一步都有额外的对,但它们对位没有影响,这是最终结果。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 此代码如何计算数字的奇偶校验?
- 按奇偶校验对数组进行排序 结果并不可靠
- 这是确定两个数字是否具有相同奇偶校验的正确方法
- 并行计算奇偶校验
- 串行端口奇偶校验检查在升压 asio 中失败
- 将C++串口奇偶校验更改代码从 Linux 移植到 Windows
- 有效地检查整数的奇偶性
- 这个代码如何使用64位乘法和模除法计算字节的奇偶校验
- 在 int 变量中查找 '1 数的奇偶校验
- 是否可以使用boost.asio实现标记和空间奇偶校验?
- 十进制奇偶校验
- CRC/奇偶校验/汉明保护16位并行总线