给定一个整数实现奇偶bit位互换

1.分别取出所有奇数bit位和偶数bit位

0x55555555(对应二进制奇数bit位为1,偶数bit位全为0)&num

0xaaaaaaaa(对应二进制即偶数bit位为1,奇数bit位全为0)&num

2.将奇数bit位的所有数字<< 1,偶数bit位的数字>> 1,然后做或(|)或者加操作,即有宏定义如下:

#define EXCHANGE(num) (((0x55555555 & num) << 1) + ((0xaaaaaaaa & num) >> 1))

时间: 2024-08-07 15:07:04

给定一个整数实现奇偶bit位互换的相关文章

给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数

1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 0101 故它的二进制权值为7(二进制表示中有7个1) 现在要求一个比N大,且最靠近N的数,且这个数的二进制权值与N相同.(这里不考虑Integer.MAX_VALUE 和负数情形.) 对于有符号的32位整数而言:它们的补码如下: Integer.MAX_VALUE= 0111 1111 1111 11

给定一个整数,求解该整数最少能用多少个Fib数字相加得到

一,问题描述 给定一个整数N,求解该整数最少能用多少个Fib数字相加得到 Fib数列,就是如: 1,1,2,3,5,8,13.... Fib数列,满足条件:Fib(n)=Fib(n-1)+Fib(n-2)   Fib(0)=1   Fib(1)=1:Fib数字,就是Fib数列中的某个数. 比如70 = 55+13+2,即一共用了3个fib数字得到 二,问题求解 ①求出所有小于等于N的Fib数字 //获得小于等于n的所有fib数 private static ArrayList<Integer>

质因数分解(给定一个整数,求该数的所有质因数)

题目:质因数分解,给定一个整数,求该数的所有质因数,例如 90 = 2*3**3*5. 首先,质数的定义(引用百度百科): 质数又称素数,有无限个.一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除(除0以外)的数称之为素数(质数):否则称为合数.根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积:而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的. 在自然数域内,质数是不可再分的数,是组成一切自然数的基本元素. 比如,10 是由两个

给定一个整数数组,奇数位于偶数前面

两个指针,一个指向最前,一个指向最后,依次进行交换 代码: #include<iostream> using namespace std; //使奇数位于偶数前面 void reSort(int *pData,int length){ if(NULL == pData || length <= 0) return ; int *pBegin = pData; int *pEnd = pData + length -1; while(pBegin < pEnd){ //奇数向前移动

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数

题目描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.   你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用.示例:给定 nums = [2, 7, 11, 15], target = 9返回 [0, 1] 思路: 第一层for循环从索引0到倒数第二个索引拿到每个数组元素,第二个for循环遍历上一层for循环拿到的元素的后面的所有元素. 具体代码: 1 public class Solution { 2 public int[] twoSum(int[] nums,

刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的题.去发现问题. 题目:     给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 解析: 实际这里就是给你的一个列表的数字,给你一个预期,让你返

递归方式实现打印一个整数的每一位

思路:与提取整数的每一位数字一样,如果输入的是1位数字,则可以直接输出,如果是2位数字则可以先将其除10化为一位数字,在输出.3位数也是如此,先化为2位数字,在进行2位数的步骤. 注意:正在这里需要注意,因为需要从高位开始打印数字,所以需要将打印放在函数调用的后面. 1 #include<stdio.h> 2 3 void Find_num(int num) 4 { 5 if(num<10) 6 { 7 printf("%d\n",num); 8 } 9 else 1

【C语言】输出一个整数的每一位

#include<stdio.h> int main() { int n; printf("请输入一个五位整数:");    // 在此输入五位数,若有需要,可更改 scanf("%d",&n); printf("%d %d %d %d %d\n",n/10000,n%10000/1000,n%1000/100,n%100/10,n%10); return 0; }

给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum

class FindClosestPairExample { public static void findAndPrintClosest(int[] arrayOne, int expectedSum) { int lenOne = arrayOne.length; //数组长度,默认全部填满. int diff = Integer.MAX_VALUE; //定义两数与期望值的差值:默认取最大整数 int resultOne = 0; //第一个元素 int resultTwo = 0; //