n >> i & 1
时间: 2024-08-07 12:01:02 浏览: 30
这句话也是C/C++中的一个位操作表达式,`n >> i & 1`的意思是首先执行右移操作(`>>`),将`n`的二进制位向右移动`i`位,然后与1做与(&)运算。`&`运算符在这里的作用是检查最左侧(由于左移后)的比特是否为1,结果是一个布尔值(0或1)。如果最左边的比特是1,则结果为1,否则为0。
例如,如果`i = 1`,`n`是一个8位二进制数,`n >> i`相当于去掉最低的一位,剩下的`n >> 1`如果是奇数,与1后的结果就是1,偶数则是0。
相关问题
sign int i = 0x81111111; i = (i >> 31) | (-i >>> 31); System.out.println( i ); reserve highest 1 int i = 0x88000088; i |= (i >> 1); i |= (i >> 2); i |= (i >> 4); i |= (i >> 8); i |= (i >> 16); i -= (i >>> 1); System.out.printf( "0x%X%n", i ); reserve lowest 1 int i = 0x88000088; i &= -i; System.out.printf( "0x%X%n", i ); number of leading 0 int i = 0x88000088; int n = 0; if (i >>> 16 == 0) { n += 16; i <<= 16; } if (i >>> 24 == 0) { n += 8; i <<= 8; } if (i >>> 28 == 0) { n += 4; i <<= 4; } if (i >>> 30 == 0) { n += 2; i <<= 2; } if (i >>> 31 == 0) { n += 1; i <<= 1; } if (i == 0) n++; // n -= i >>> 31; System.out.println( n ); number of 1 int i = 0x81111111; i = ((i&0xAAAAAAAA) >>> 1) + (i&0x55555555); i = ((i&0xCCCCCCCC) >>> 2) + (i&0x33333333); i = ((i&0xF0F0F0F0) >>> 4) + (i&0x0F0F0F0F); i = ((i&0xFF00FF00) >>> 8) + (i&0x00FF00FF); i = ((i&0xFFFF0000) >>> 16) + (i&0x0000FFFF); System.out.println( i ); reverse order int i = 0x11111111; i = ((i&0xAAAAAAAA)>>>1) | ((i&0x55555555)<<1); i = ((i&0xCCCCCCCC)>>>2) | ((i&0x33333333)<<2); i = ((i&0xF0F0F0F0)>>>4) | ((i&0x0F0F0F0F)<<4); i = ((i&0xFF00FF00)>>>8) | ((i&0x00FF00FF)<<8); i = ((i&0xFFFF0000)>>>16) | ((i&0x0000FFFF)<<16); System.out.printf( "0x%X%n", i );翻译代码
这是一些关于位运算的Java代码。下面是每个代码段的翻译:
1.将i初始化为0x81111111,然后对i进行位运算,将i的最高位和最低位进行保留,并输出i的值。
2.将i初始化为0x88000088,然后对i进行位运算,将i的最高位进行保留,并输出i的值。
3.将i初始化为0x88000088,然后对i进行位运算,将i的最低位进行保留,并输出i的值。
4.将i初始化为0x88000088,然后对i进行位运算,计算i的前导零的数量,并输出这个数量。
5.将i初始化为0x81111111,然后对i进行位运算,计算i中1的数量,并输出这个数量。
6.将i初始化为0x11111111,然后对i进行位运算,将i的二进制位按照相反的顺序排列,并输出i的值。