这道题要利用101010来&. 如下答案: public class Exchange { public int exchangeOddEven(int x) { // write code here int res =(((x & 0x55555555)<<1) | ((x & 0xaaaaaaaa)>>1)); return res; } }
D. Magic Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Consider the decimal presentation of an integer. Let's call a number d-magic if digit d appears in decimal presentation of
面试题5.1:给定两个32位的整数N与M,以及表示比特位置的i与j.编写一个方法,将M插入N,使得M从N的第j位开始,到第i位结束.假定从j位到i位足以容纳M,也即若M=10011,那么j与i之间至少可容纳5个位.例如,不可能出现j=3和i=2的情况,因为第3位和第2位之间放不下M. 输入:N=10000000000,M=10011,i=2,j=6,最后是第0位 输出:N=10001001100 package cc150.bit; public class UpdateBits { //面试题
BITCOUNT命令是统计一个位数组中非0进制位的数量,数学上称作:”Hanmming Weight“ 目前效率最好的为variable-precision SWAR算法,可以常数时间内计算出多个字节的非0数目,算法设计的非常精巧,值得学习. int swar(uint32_t i) { // (A) i = ( i & ) & 0x55555555); // (B) i = (i & ) & 0x33333333); // (C) i = (i & ) &
5.6 Write a program to swap odd and even bits in an integer with as few instructions as possible (e.g., bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, and soon). 这道题让我们交换奇偶位,那么我们首先还是要考虑用位操作Bit Manipulation来做,我们知道由于奇偶位是相邻的,奇数位平移一位就是偶数位,反过来偶