‘>>’,‘<<’和‘&’的使用

>>:

n = n >> 1 是使用位移运算符将 n 向右移动一位的操作。在 C 语言中,>> 是右移位运算符,表示将二进制数向右移动指定的位数。

对于无符号整数,在右移位操作时,高位用 0 填充。例如,如果 n 的二进制表示是 10101010,执行 n = n >> 1 操作后,n 的值将变为 01010101

对于有符号整数,右移位操作存在两种情况。如果该整数是正数,那么在右移位操作时,高位用 0 填充。如果该整数是负数,那么在右移位操作时,高位用 1 填充。例如,如果 n 的二进制表示是 11110000,执行 n = n >> 1 操作后,n 的值将变为 11111000

在此题中,n = n >> 1 可以用来将 n 除以 2,并将结果赋值给 n。这样可以得到 n 的一半值(向下取整)。

<<:

<< 是左移位运算符,用于将一个整数的二进制表示向左移动指定的位数。在 C 语言中,左移位运算符 << 的使用格式为 a << b,其中 a 和 b 都是整数,表示将 a 向左移动 b 位。

例如,如果 a 的二进制表示是 1010,执行 a = a << 1 操作后,a 的值将变为 10100

在左移操作时,低位补 0。例如,如果 a 的二进制表示是 1010,执行 a = a << 2 操作后,a 的值将变为 101000

在此题中,1 << i 表示将数字 1 的二进制表示向左移动 i 位,得到的结果是一个二进制数,其中只有第 i 位是 1,其余位都是 0。这可以用来获取数字的二进制表示中的某一位。例如,如果要获取数字 n 的第 i 位,可以通过 (n >> i) & 1 来实现,其中 (n >> i) 表示将 n 向右移动 i 位,得到的结果是 n 的二进制表示中从右往左数的第 i 位,& 1 表示将这个位上的值与 1 进行按位与操作,得到的结果就是 n 的二进制表示中从右往左数的第 i 位的值。

&:

n & 1 是使用位运算符进行按位与操作的表达式。在 C 语言中,& 是按位与运算符,它对两个操作数的二进制表示进行按位与操作。

具体来说,n & 1 将 n 和 1 的二进制表示进行按位与操作。这个操作的结果是一个新的整数,其中每个位都是通过将 n 和 1 的相应位进行与操作得到的。

在二进制中,1 的二进制表示是 00000001。假设 n 的二进制表示为 abcdefgh,则 n & 1 的结果是 0...0h,其中 h 是 n 的最低位。

由于 1 的二进制表示只有最低位是 1,其他位都是 0,因此 n & 1 的结果就是 n 的最低位的值。

在此题中,n & 1 可以用来判断 n 的最低位是 0 还是 1。如果结果为 0,表示 n 的最低位是 0;如果结果为 1,表示 n 的最低位是 1。这可以用来判断 n 是偶数还是奇数

‘>>’,‘<<’和‘&’的使用_第1张图片

你可能感兴趣的:(算法,c语言,学习,经验分享)