gpt4 book ai didi

c - 在 C 中是否有等价的 & 表达式 >> 31

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:55 24 4
gpt4 key购买 nike

我正在尝试理解 CRC-32 算法。是否有一个等效的表达式:

y = (X >> 31) ^ (data >> 7);

使用&,类似于

y = (x & 0x8000) ^ (data & 0x800)

最佳答案

嗯,这取决于你的计算,但在位操作中,每个运算符(operator)都有自己做事的动机。不同的运算可以得到相同的答案,但这并不意味着运算符彼此等价。每个运营商都有不同的动机来实现。

bit a   bit b   a & b (a AND b)     a | b (a OR b)   a ^ b (a XOR b)
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

<< 和 >> 的目的是从计算中清除位/丢弃位

右移

右移运算符的符号是>>。对于它的操作,它需要两个操作数。它将其左操作数中的每一位向右移动。运算符后面的数字决定了移位的位数(即右操作数)。因此,通过执行 ch >> 3,所有位都将向右移动三个位置,依此类推。

i = 14; // Bit pattern 1110
j = i >> 1; // bit pattern shifted 1 thus we get 111 = 7 = 14/2

左移

左移运算符的符号是<<。它将其左侧操作数中的每一位向左移动右侧操作数指示的位置数。它的工作原理与右移运算符相反。因此,通过在上面的示例中执行 ch << 1,我们得到 11001010。生成的空格由上面的零填充。

左移可用于乘以 2 的倍数的整数,如下所示:

 int i = 4; /* bit pattern equivalent is 100 */
int j = i << 2; /* makes it 10000, original number by 4 i.e. 16 */

关于c - 在 C 中是否有等价的 & 表达式 >> 31,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com